【问题标题】:Need to stringify? Confusion over format of data for posting array of objects from javascript to PHP需要字符串化吗?混淆从 javascript 到 PHP 发布对象数组的数据格式
【发布时间】:2012-01-05 20:44:16
【问题描述】:

我正在尝试将一组对象从 jQuery/Javascript 客户端脚本发布到服务器端 PHP 脚本。

我仍然对对象数组数据在到达服务器之前应该采用的格式感到困惑。

我创建一个数组来存储 json 对象

var jsonObjects = [];

我将单个 json 对象添加到数组中

var jsonObj1 = {};
 jsonObj1.place = "London";
 jsonObj1.position = 1;

 jsonObjects.push(jsonObj1);

 var jsonObj2 = {};
 jsonObj2.place = "Melbourne";
 jsonObj2.position = 2;

 jsonObjects.push(jsonObj2);

..等

然后我尝试通过 ajax 发布这些数据(我在发布之前尝试过字符串化,也尝试过不进行字符串化)

例如

//var data = jsonObjects;
//var data = JSON.stringify(jsonObjects);

jQuery.ajax({
            url: "/drupal/menu_item",
            type: 'POST',
            data: data
            dataType: 'json'
             });

无论是在 Firebug 的 XHR 选项卡上,它都只显示数据的字符串化版本 例如 [{"place":"伦敦","position":"2"}, {"place":"墨尔本","position":"2"}]

而不是看起来像以前将数据分解为参数的帖子详细信息的样子。当然,除非 PHP 在字符串化状态下查找数据确实有效(?)

我似乎发现了关于如何将一组 json 对象发送到 PHP 的相互矛盾的细节。在执行 ajax 请求时,数据应该处于什么状态? a) 对象的字符串化数组 b) 对象数组 c) 又是别的东西(?)

非常感谢任何帮助澄清这一点:)

谢谢,

罗文

【问题讨论】:

    标签: javascript jquery ajax json post


    【解决方案1】:

    字符串化数据只是 JS 对象的文本表示。因此,您可以在字符串化的 JS 对象上运行json_decode 以获得 PHP 数据结构。

    另一方面,如果您的对象是简单的键值对象,没有太多深度(多维数组),那么它们可以作为查询字符串发送并解析为 PHP 的 $_POST / $_GET / $_REQUEST

    【讨论】:

    • 好的,谢谢。 js 对象是否需要以文本表示形式才能将该数据发布到 PHP?
    • 嗯,您正在通过 HTTP 与 PHP 通信。所以是的,无论您发送什么必须都是纯文本。
    • 嗨,是的,这是有道理的。我想我感到困惑的地方是我在某处读到,如果你发布一个对象数组并指定 json 的数据类型,它会将它转换为你的字符串(? )
    • dataType 指定您希望响应返回的格式。您发送给 PHP 的内容是通过 HTTP 发送的。由于 HTTP 不能表示 JavaScript 的内部数据结构,它必须将 JS 对象转换为可以来回序列化的东西 - 因此,您必须发送 JS 对象的文本表示 - 这就是 stringify 所做的。然后 PHP 可以尝试通过 json_decode 将这段文本转换为您可以使用的自己的内部数据结构(数组或对象)。
    • 啊哈!对..我没有意识到这就是数据类型的意思..现在您指出了通过 HTTP 发送它必须是字符串表示形式是完全有道理的..再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多