0

I have array in json, but I want to print it in php. I get in post this :

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

but when I use print_r($_POST) in my php file, it print me the empty array. there is my js code:

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

json_decode()PHP は、 ;を使用して JSON をデコードするためのネイティブ サポートを備えています。

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

PHP$_POST配列はキーと値のペアから解釈されるため、次のように ajax 呼び出しを変更する必要があります。これは、コードがキーなしで投稿データを送信しているためです。

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 に答える