1

我有一个像这样创建的数组或 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,我真的应该将结构的整个格式更改为像最后一个示例一样吗?

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

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

{"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对象,而不是字符串。

4

1 回答 1

7

可以发送 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);
于 2013-01-06T16:00:44.283 回答