使用jQuery AJAX将JSON对象传递给PHP

时间:2014-04-26 11:26:04

标签: php jquery ajax arrays json

我有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初学者的一个很棒的工具。

2 个答案:

答案 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是否正确: -

http://json.parser.online.fr/

我认为你希望它看起来更像: -

[{
"test1_key":"test1_val",
"test2_key":"test2_val",
"test3_key":"test3_val"
},
{
 "test4_key": "test4_val"
},
{
"json_obj_3":[
    {"test1":"test2","test3":"test4"}
]
}]