我是JSON的新手。
在JS中,我创建了一个像这样的值数组:
var arrFields = $("td>.frmInput").map(function(){
return {
id: this.id,
value: $(this).val()
};
}).get();
然后我将它们AJAX到服务器,如下:
$.ajax({
type: "POST",
url: "ajax/ax_all_ajax_fns.php",
data: "Fields=" +JSON.stringify(arrFields),
success: function(recd) {
alert(recd);
}
});
请注意,有一些字符串混合,加上JSON.stringified(?)数组。 (发送了其他字符串值,因此数据必须保留为字符串。)
在PHP方面,我需要将收到的Fields
字符串转换为关联数组。
这样做:
$jsonAsStr_Fields = $_POST['Fields'];
die($jsonAsStr_Fields);
在alert()
:
[{"id":"rateDriver","value":"Jacques Villeneuve"},{"id":"rateCar","value":"Chev"}]
这样做:
$arrFields = json_decode($jsonAsStr_Fields, TRUE);
$driver = $arrFields['rateDriver'];
$car = $arrFields['rateCar'];
$tire = $arrFields['rateTire'];
die('Driver: [' .$driver. '] Car: [' .$car. '] Tire: [' .$tire. ']');
返回:
Driver: [ ] Car: [ ] Tire: [ ]
如何将$ jsonAsStr_Fields字符串转换为assoc数组,从而将正确的值输出到警报?
答案 0 :(得分:1)
请改为创建值:
var arrFields = {};
$("td>.frmInput").each(function(){
arrFields[this.id] = $(this).val();
});
这将在JSON字符串化时创建一个对象,如下所示:
{"rateDriver":"Jacques Villeneuve", "rateCar":"Chev"}
这似乎是您要在PHP代码中使用的格式。
答案 1 :(得分:1)
你有一组关联数组,你的数组没有指定的道具,rateDriver
例如是第一个数组的元素id
的值:
$driver = $arrFields[0]['id'];
$car = $arrFields[1]['id'];
要查看数组的内容,请使用着名的var_dump
函数。
答案 2 :(得分:0)
来自作者:
对于那些尚未完全理解解决了这个问题的人。
潜在的问题是,在AJAX中,字符串化的JSON在途中被修改(在点击提交按钮后到达PHP端)。所有引号都被转义,这使得该字符串无法与json_encode一起使用。
这是通过在接收数据到达PHP端时抓取接收数据的值来发现的:
$jsonAsStr_Fields = $_POST['Fields'];
die($jsonAsStr_Fields);
并在AJAX成功函数中提醒收到的数据:
success: function(recd) {
alert(recd);
}
上述两个都在OP中描述。
然而,因为我认为这是一个无关的问题,我在发布问题时“修复”了alert()框中显示的字符串。要吸取的教训:不要帮助 - 只发布你实际看到的内容。
它真的显示如下:
{\"id\":\"rateDriver\",\"value\":\"Jacques Villeneuve\"}
但是我写道它显示如下:
{"id":"rateDriver","value":"Jacques Villeneuve"}
当然,json_decode()
PHP函数不知道如何处理反斜杠,所以字符串没有转换。
解决方案是在PHP端对收到的JSON字符串使用 str_replace()来解决问题,如下所示:
str_replace("\\", "", $_POST['Fields']);