【问题标题】:javascript object to php using jquery ajax使用 jquery ajax 到 php 的 javascript 对象
【发布时间】:2012-12-20 11:12:57
【问题描述】:

我有一个像这样创建的数组或 javascript 对象: arr[arr.length]=obj 其中 obj 是经典的 JSON 字符串,例如 {"id":1}

所以arr 似乎是一个 JavaScript 对象数组。

我可以这样访问它: arr[1]arr[2]。 甚至可以像alert(arr[1].id);

如果我这样做: 警报(JSON.stringify(arr)); 我得到以下信息:

[{"id":"2305","col":"1"},{"id":"2308","col":"1"},{"id":"2307","col":"1"},{"id":"2306","col":"1"}]

而 警报(arr); 给了我类似的东西:

[object Object],[object Object],[object Object],[object Object],[object Object]

现在我需要使用 jQuery 的 AJAX 方法将它传递给 PHP 脚本。但它似乎只能得到组合字符串,如:

{"id":"2305","col":"1"}{"id":"2305","col":"1","id":"2305","col":"1"}

但是 JSON.stringify 成功地解析了 arr 对象,我之前的字符串示例似乎是一个有效的 JSON 字符串。我该如何传递给 PHP,我真的应该将整个结构格式更改为像上一个示例一样吗?

更新: 我忘了提到如果发送 '{},{},{}' 字符串而不是 '{}' 字符串,PHP 的 POST 数组为空。

更新: 我重写了生成字符串的代码。现在我有一个这样的字符串:

{"2305":"1","2306":"1"}

如果我直接将它传递给 PHP,它就可以工作,如下所示:

   $.post({url: '../getItems2Cart.php', data:{"2305":"1","2306":"1"} ,
       success: function(response){alert(response);}
   });

如果我这样发送,php 返回空的 POST 数组:

$.post({url: '../getItems2Cart.php', data: JSON.stringify(str),.
       success: function(response){alert(response);}
});

为了清楚起见,alert 现在返回一个正确的 JSON:

alert('json str to php '+JSON.stringify(str));
//json str to php {"2305":"1","2306":"1"}

啊.. 是的,而且 str 是一个 javascript 对象,而不是字符串。

【问题讨论】:

    标签: php javascript jquery ajax json


    【解决方案1】:

    可以发送 JSON 并使用json_decode() 将其转换为 php 数组。

    $.post('server/path', { jsonData: JSON.stringify(arr)}, function(response){
       /* do something with response if needed*/
    });
    

    在 php 中:

    $arr=json_decode( $_POST['jsonData'] );
    /* return first ID as test*/
    echo $arr[0]['id'];
    /* or dump whole array as response to ajax:*/
    print_r($arr);
    

    【讨论】:

    • 抱歉,我忘了说 PHP 的 POST 数组如果发送 {},{},{} 字符串而不是 {} 字符串则为空。
    • 不清楚您发送的内容。如果它与有问题的I get the following: 之后的代码匹配应该可以正常工作。我不明白{},{},{} vs {} 是什么意思。首先应该是一个数组[{},{},{}]
    • 您没有按照我的示例为 JSON 字符串设置密钥。 POST 需要键/值对......如果你只是发送字符串,你只是发送一个值,所以 $_POST 将为空
    • 可能我没有得到你的例子。如果我直接发送字符串 - 它可以工作。如果我对对象进行字符串化,它不会。可能有一个小细节,我错过了。
    • 什么意思没有得到它?? ...这是我答案中的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2011-03-13
    • 2012-01-31
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多