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

标签 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 初学者来说是一个很棒的工具。

最佳答案

您应该对整个对象进行字符串化,请尝试以下操作:

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']));

关于php - 使用 jQuery AJAX 将 JSON 对象传递给 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23310169/

相关文章:

php - jQuery 字符串替换非常特殊的字符

javascript - Backbone js追加替换html而不是追加元素

javascript - 如何有效地将 yepnope.js 与 $(document).ready() 一起使用?

javascript - Reactjs 在单击按钮时多次触发 AJAX 调用(每次单击只需要 1 次!)

Javascript 按钮在开始时调用,而不是在之后调用

php - 如何使用 AJAX 将数据发送到我的 PHP 脚本?

javascript - 复制外部 json 数据并粘贴到本地 json 文件中

php - 清除magento中的所有catalog_product_flat表

php - CakePHP - 如何更新多条记录

javascript - 如何将变量设置为 AJAX 响应数据?