我读过很多与我的困境有关的文章,但我不明白我的问题是什么,所以请有人帮我解释一下:
我想使用 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% 确定标志有一个值。
附加信息:
- Mime.types激活了所有JSON选项。
- 控制台.log(数据(返回未捕获的引用错误:未定义数据。
- errorThrow 返回解析错误:位置 0 中出现意外<- 我可以让它在位置 0 中说意外的 A,但它仍然是一个正在发送的空数组。
- 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
默认情况下设置为 reply
为 not found
。如果数据可用,则会设置消息reply
。然后它echoes
消息的 json 版本。