我有3个不同的JSON对象,我想连接并使用jQuery AJAX发送到PHP文件。我可以在PHP文件中检索JSON对象,但无法弄清楚如何遍历结果。
这是我到目前为止所拥有的:
//my 3 JSON objects:
var json_obj_1{
"test1_key":"test1_val",
"test2_key":"test2_val",
"test3_key":"test3_val"
}
var json_obj_2{
"test4_key":"test4_val"
}
var json_obj_3{
"json_arr":[
{
"test1":"test2",
"test3":"test4"
}
]
}
//concat these to send over to the PHP file:
var my_json_obj = json_obj_1.concat(json_obj_2);
//I found if I didn't stringify obj_3 they didn't concatenate for some reason
my_json_obj = my_json_obj.concat(JSON.stringify(json_obj_3));
//my_json_obj now looks like this:
{
"test1_key":"test1_val",
"test2_key":"test2_val",
"test3_key":"test3_val"
}
{
test4_key: test4_val
}
{
"json_obj_3":[
{"test1":"test2","test3":"test4"}
]
}
基于这个问题:Sending JSON to PHP using ajax,我没有将最终的JSON对象字符串化。
这是对PHP文件的AJAX调用:
$.ajax({
url: 'my_php_file.php',
data: {my_json_data: my_json_obj},
type: 'POST',
async: false,
dataType: 'json',
cache:false,
success:function(data, textStatus, jqXHR){
console.log('AJAX SUCCESS');
},
complete : function(data, textStatus, jqXHR){
console.log('AJAX COMPLETE');
}
});
这是在我的PHP文件中检索时的样子:
echo $_POST['my_json_data'];
//outputs:
{
"test1_key":"test1_val",
"test2_key":"test2_val",
"test3_key":"test3_val"
}
{
test4_key: test4_val
}
{
"json_obj_3":[
{"test1":"test2","test3":"test4"}
]
}
这是我遇到问题的地方。我希望能够在foreach中循环使用它。从我所读的(php: loop through json array)开始,我必须解码JSON对象。然而,当我这样做并循环结果时,我得到:" PHP警告:为foreach()"提供的参数无效。
即使我在将JSON对象发送到PHP文件之前对其进行了字符串化,我也会遇到同样的问题。我一直在用砖头敲打砖墙好几个小时。任何帮助将受到大力赞赏。
提前致谢。
解决:
在按照以下问题连接我的JSON对象时出错了:Merge two json/javascript arrays in to one array。相反,我只是把它们放在一起:
my_json_obj = '['+json_obj_1+','+json_obj_2+', '+JSON.stringify(json_obj_3)+']';
然后我在我的PHP文件中使用json_decode进行处理。 http://json.parser.online.fr/在调试我狡猾的JSON方面非常宝贵。 JSON初学者的一个很棒的工具。
答案 0 :(得分:3)
您应该对整个对象进行字符串化,请尝试以下操作:
var my_json_obj = json_obj_1;
$.each(json_obj_2, function(key,value){
my_json_obj[key]=value;
});
$.each(json_obj_3, function(key,value){
my_json_obj[key]=value;
});
Ajax请求:
data: {my_json_data: JSON.stringify(my_json_obj)},
PHP:
print_r(json_decode($_POST['my_json_data']));
答案 1 :(得分:1)
正如您所说,您需要解码JSON,但您的JSON格式不正确,因此我认为解码功能失败会导致foreach错误。在对象之间需要有一个在test4_val周围缺少引号,它需要在一个单一的对象/数组中
您可以检查您的JSON是否正确: -
我认为你希望它看起来更像: -
[{
"test1_key":"test1_val",
"test2_key":"test2_val",
"test3_key":"test3_val"
},
{
"test4_key": "test4_val"
},
{
"json_obj_3":[
{"test1":"test2","test3":"test4"}
]
}]