【问题标题】:PHP is not able to read data sent in jQuery.ajax POSTPHP 无法读取 jQuery.ajax POST 中发送的数据
【发布时间】:2014-05-13 02:44:04
【问题描述】:

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['data'] 似乎总是为空(特别是未定义)。如果您想要我正在使用的数据对象的完整副本,请查看this JSFiddle。感谢您的帮助,谢谢!

【问题讨论】:

    标签: javascript php jquery json stringify


    【解决方案1】:

    您已经告诉服务器您正在发送 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}),
    

    【讨论】:

    • 谢谢!我不确定我是否会这样!我编辑了我的问题以包含 var j = jQuery.noConflict();以便为他人消除混乱。
    • 作为后续问题,我有什么理由不应该以 JSON 格式发送?我可以直接发送吗?我一直认为它必须是某种格式,JSON 和 XML 是最流行的两种
    • @MatthewHerbst:您必须以 some 格式发送数据。 发送到服务器最流行的格式是 URI 编码(技术上,application/x-www-form-urlencoded; charset=UTF-8),这是您在外层使用的格式(您的 POST 包含单个 URI 编码字段, data;该字段的值是 JSON 字符串)。将数据服务器发送到客户端的流行格式是 JSON 和 XML。对于向服务器发送复杂数据,JSON-over-URI-encoding(你所做的)似乎很好,我过去使用过。
    • @T.J.Crowder 如果他将data 发送为JSON,为什么would require changing your PHP?我认为他的 PHP 代码适合这种情况?
    • @Felix 我对如何处理 PHP 方面也有些困惑。我喜欢data: JSON.stringify({data: data}), 的做法,因为这会将我的所有数据都放在 $_POST['data'] 字段中。但是,PHP 会自动解码 JSON 吗?如果没有,如果只是发布一个大的 JSON 字符串,PHP 怎么知道将数据放入 $_POST['data']?我想这归结为问我到底在哪里做json_decode()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2020-06-20
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多