PHP无法读取jQuery.ajax POST中发送的数据

时间:2014-04-02 03:20:50

标签: javascript php jquery json stringify

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。感谢您的帮助,谢谢!

1 个答案:

答案 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}),