【问题标题】:Consuming JSON object in PHP, sent from jQuery在 PHP 中使用 JSON 对象,从 jQuery 发送
【发布时间】:2009-11-19 14:47:13
【问题描述】:

我通过 jQuery 向 PHP 发送一个 JSON 对象

$.ajax({
    url: myURL,
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: myData,
    processData: false,
    dataType: 'html',    
    async: false,
    success: function(html) {
        window.console.log(html);
    }
});    

并尝试使用解码 JSON 对象

$GLOBALS["HTTP_RAW_POST_DATA"];

但变量的内容打印为

[object Object]

json_decode() 返回 NULL(当然)。

任何想法我需要做些什么来获取实际的 JSON 数据?

谢谢, 天然气。

【问题讨论】:

  • myData 的内容是什么?你能输出(例如使用萤火虫)以确保它具有正确的内容(并发布结果)吗?
  • 我已经用window.console.log打印出来了,没错。
  • 对象 ar:数组内容:“更多测试数据”链接标题:“”标题:“” en:数组内容:“我的测试数据”链接标题:“”标题:“”

标签: php jquery json


【解决方案1】:

看起来您正在向 PHP 发送一个字符串。默认情况下,Jquery 以正常的 post 格式发送数据。 PHP 可以很好地读取这些数据。我建议只从 POST 数组中获取您需要的数据。

如果您尝试通过 JSON 序列化 Javascript 对象,然后将其转换回 PHP 端的对象,那么您可能想要走 JSON 路线。您将需要一个插件将数据从字符串转换为 JSON。您可能要考虑: http://code.google.com/p/jquery-json/

你会换行:

   data: myData,

收件人:

    data: $.toJSON(myData),

那么在 PHP 端你仍然会收到 post 数组中的数据,你可以使用以下命令对其进行转换:

$params = json_decode($_POST[]);

【讨论】:

  • 好的,现在可以了。另一个问题是在 javascript 数组中使用非数字键。使用 $.toJSON 并更改为数字键,它可以工作。顺便说一句,我没有使用 $_POST,而是使用了 contentType: "application/json; charset=utf-8" 和 processData: false,然后从 $GLOBALS["HTTP_RAW_POST_DATA"] 解码了 JSON。干杯,加兹。
【解决方案2】:

看起来你没有向你的 php 脚本发送一个 JSON 对象,只是字符串'object Object'。

【讨论】:

  • 是的,我看到了!你知道我需要在 jQuery AJAX 调用中改变什么吗?谢谢,盖兹。
【解决方案3】:

您是否尝试过使用 $_POST?

我处理我的所有 JSON 请求或多或少是这样的:

$params = json_decode($_POST[]);

【讨论】:

  • 结果是一样的,一个空数组。
【解决方案4】:

您实际上是通过 POST 发送一个字符串。我推荐使用JSON2 来字符串化你的Javascript 对象。 使用

var myData = JSON.stringify(myObject, replacer);

【讨论】:

    【解决方案5】:

    使用file_get_contents('php://input') 代替$GLOBALS["HTTP_RAW_POST_DATA"];

    【讨论】:

    • 无论如何这两者是等价的。
    【解决方案6】:

    您已在 ajax 调用中将 dataType 设置为“html”。不应该是'json'吗?我认为你漂亮的 json 对象正在被压缩成一个无意义的字符串。

    【讨论】:

    • dataType -> 您期望从服务器返回的数据类型。
    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2014-07-08
    • 2012-06-12
    • 2012-06-14
    • 2020-01-12
    • 2011-12-05
    相关资源
    最近更新 更多