jQuery Ajax 错误 200 解析错误


jQuery Ajax error 200 parse error

我读过很多与我的困境有关的文章,但我不明白我的问题是什么,所以请有人帮我解释一下:

我想使用 jQuery ajax 将值发布到 PHP 文件:

$().ready(function(){
"use strict";
$("#ansSubmit").click(function() {
    $.ajax({
        type: "POST",
        url: "updateScore.php",
        dataType: "json",
        data:{ 
            data : JSON.stringify(flag)
        },
        success: function(data) {
            alert(data.reply);
        },
        error: function(jqXHR, textStatus, errorThrown) {
          alert("jqXHR: " + jqXHR.status + "'ntextStatus: " + textStatus + "'nerrorThrown: " + errorThrown);
        }
    });  
    $("#infoDiv").load("updateScore.php"); // to see what $_POST contains
  });
});

发送的标志变量是一个整数。

这是我更新的updateScore.php(我发布到的PHP文件(:

<?php
session_start();
$returned = array("reply" => "no data received");
if(isset($_POST["data"])) {
   $returned["reply"] = $_POST["data"];
}
print_r($_POST);
echo json_encode($returned);
?>

返回"未收到数据",所以至少我知道它达到了 updateScore.php但现在我需要帮助确定为什么它没有发送任何内容 - 我 100% 确定标志有一个值。

附加信息:

  1. Mime.types激活了所有JSON选项。
  2. 控制台.log(数据(返回未捕获的引用错误:未定义数据。
  3. errorThrow 返回解析错误:位置 0 中出现意外<- 我可以让它在位置 0 中说意外的 A,但它仍然是一个正在发送的空数组。
  4. print_r($_POST( 返回 Array((
首先,

你告诉服务器你正在发送JSON:

contentType: "application/json",

然后将一个对象传递给 data 。这被编码为application/x-www-form-urlencoded(这不是JSON,尽管它恰好嵌入了JSON(。

data:{ 
    data : JSON.stringify(flag)
},

然后在PHP中,您尝试从$_POST读取

if(isset($_POST["data"])) {

。但是$_POST是空的,因为您告诉服务器您要发送JSON,因此没有尝试对其进行解码。


删除此行:

contentType: "application/json",

。因为这是一个破坏你的代码的谎言。


或者

您实际上可以发送 JSON:

contentType: "application/json",
data: JSON.stringify(flag),

。然后从原始请求正文而不是(仍未填充的($_POST 中读取它。

$json = file_get_contents('php://input');
$data = json_decode($json);

从您的示例中,您希望返回一个 json 对象,但您正在回显it works .... .

在 PHP 中尝试此示例代码:

$returned = array("reply" => "not found");
if(isset($_POST["data"])) {
     $returned["reply"] = "It works!" . $_POST["data"];
}
echo json_encode($returned);

基本上这个示例代码将一个数组returned默认情况下设置为 replynot found 。如果数据可用,则会设置消息reply。然后它echoes消息的 json 版本。