JavaScript代码:
var data = {"hiSO": "my very complex - nested objects/arrays - data object"};
var j = jQuery.noConflict();
j.ajax({
type: "POST",
url: "postTestingResult.php",
contentType: "application/json; charset=utf-8",
data: {"data": JSON.stringify(data)},
dataType: "json",
success: ajaxSuccess,
error: ajaxError
});
PHP代码:
header('Content-Type: application/json');
if(!empty($_POST['data'])) {
$data = json_decode($_POST['data']);
//do things with data
echo json_encode(array("success" => "thanks for the info!"));
} else {
echo json_encode(array("error" => "'data' is not set or is NULL"));
}
无论我如何构建数据,$ _POST ['数据']似乎总是空的(具体来说,未定义)。如果您需要我正在使用的数据对象的完整副本,请查看this JSFiddle。感谢您的帮助,谢谢!
答案 0 :(得分:6)
您告诉服务器您正在发送JSON(通过contentType: "application/json; charset=utf-8"
),但您没有发送JSON,而是发送URI编码数据。这是因为你给了jQuery一个data
选项的对象(一个具有一个属性的对象,其值是一个JSON字符串)。
您的PHP代码需要URI编码数据,因此要修复它只需删除contentType
选项,以便jQuery使用其默认值。
如果您确实想要发送JSON(这需要更改您的PHP),请更改
data: {"data": JSON.stringify(data)},
到
data: JSON.stringify(data),
或
data: JSON.stringify({data: data}),