0

我在 json 中有数组,但我想在 php 中打印它。我得到这个帖子:

[{"cartData":{"id":"dragged_567737","left":"255px","top":"71px"}},{"cartData":{"id":"dragged_757836","left":"43px","top":"73px"}}]

但是当我在我的 php 文件中使用 print_r($_POST) 时,它会打印出空数组。有我的js代码:

jQuery('#save_project_data').click( function() {
            var array=[];
            var numItems = $('.icart').length;

            $(".icart").each(function(index) {
                var cart_id = $(this).attr("id");
                var cart_left = $(this).css("left");
                var cart_top = $(this).css("top");

                var cartData = {  
                   "id" : cart_id,                                
                   "left" : cart_left,
                   "top" : cart_top
                };
                queryStr = { "cartData" : cartData };
                array.push(queryStr);
            });

            var postData = JSON.stringify(array);
           $.ajax({
                   url  : "modules/cart_projects/saveData.php",
                   type : "POST",
                   dataType: 'json',
                   contentType: 'application/json; charset=utf-8',

                   data : postData,//{ 'data': '{"name":"chris"}' }
                   traditional: true,
                   success: function(){
                        alert("OK");
                    } 
               });
            return false;
        });
4

4 回答 4

2

PHP 原生支持使用json_decode();解码 JSON。

$data = json_decode($_POST['myJson']);
print_r($data);

PHP$_POST数组是从键值对解释的,因此您需要更改 ajax 调用,如下所示,因为您的代码正在发送没有键的 post 数据。

data : { myJson : postData },//{ 'data': '{"name":"chris"}' }

如果您像上面那样更改数据结构,您还需要删除您的application/json; charset=utf-8内容类型。

手册

采用 JSON 编码的字符串并将其转换为 PHP 变量。

于 2012-12-17T10:15:08.013 回答
2

如果您将原始 JSON 字符串发送到 PHP,则不会填充 $_POST(因为它需要 POST 请求提交的标准 urlencoded 字符串进行解码)。您可以通过使用 postData 作为对象来解决此问题:{'json': json},以便您获得 $_POST['json'] 中的值,或者通过读取原始响应:

$json_string = file_get_contents('php://input');
$struct = json_decode($json_string, true);
于 2012-12-17T10:19:36.077 回答
0

尝试使用 json_decode() 函数。

于 2012-12-17T10:15:06.663 回答
-1

根据jQuery.ajax()文档:

要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。它附加到 GET 请求的 url。请参阅 processData 选项以防止此自动处理。对象必须是键/值对。如果 value 是一个数组,jQuery 会根据传统设置的值(如下所述)序列化具有相同键的多个值。

为了安全起见,您最好使用该jQuery.post()方法。

最后,我建议给data属性一个object. 这样你就可以为你的帖子数据设置一个标识符。

Javascript

{
    url: 'modules/cart_projects/saveData.php',
    data: {
        mydata: postData
    }
}

PHP

$_POST['mydata'];

如果您需要解码 JSON:

json_decode($_POST['mydata']);
于 2012-12-17T10:14:57.320 回答