2012-04-12 4 views
1

下記のJSONオブジェクト "data"をシリアル化できません。JQueryでJSONオブジェクトをシリアライズする方法

<script type="text/javascript"> 

var myObj = {'first_name':{'answers':{'0':'John'}}}; 
var postdata = {'data':myObj}; 
$.post("get_note.php", postdata, function(data){ 
    $('#note').text(data); 
}); 

</script> 

がファイルget_note.phpのコードである:

<?php 

print_r($_POST['data']); 
?> 

これは#note要素に印刷される以下になります。

Array ([first_name] =>) 

アレイが空に見えます。私はPHPファイル内に多次元配列を期待していました。なぜそれは空ですか?

答えて

0

クライアントでは、純粋なjavascriptのJSON.stringify()を実行してシリアル化できます。サーバー上では、文字列にPHP json_decode()を実行する必要があります。

var postdata = {'data':JSON.stringify(myObj)}; 

と、サーバー上:

$myObj = json_decode(htmlspecialchars_decode($_POST['data']),true); 

参考文献:

JS JSON.stringify():だから、クライアント上

http://www.json.org/js.html

PHPのjson_decode() :http://php.net/manual/en/function.json-decode.php

+0

古いブラウザを、 'JSON.stringify'を実装していません。この場合、[CrockfordのJSON実装(Javascript)](https://github.com/douglascrockford/JSON-js)をご覧ください。 – spidey

+0

はい、それはそれを得るのに最適な場所です:json.org。ネイティブ実装の代わりに使用します。 –

+0

json_decodeを正しく動作させるために、$ data = json_decode($ _ POST ['data'])を使用する必要がありました。 – Stephen305

0

シリアライズされたJSON配列を送信し、サーバー側で復号化することができます。だからあなたのコードは、この中に入れます

$json = $_POST["my_json_array"]; 
$my_array = json_decode($json); 

:そして、サーバ側では、このようにPHPの配列に(デコード)に変換することができます

var my_json_array = { index: 11 }; 
JSON.stringify(my_json_array); 

:JSON配列はこれを使用するシリアル化するために

<script type="text/javascript"> 

var data = {'first_name':{'answers':{'0':'John'}}}; 
var postdata = {'data':JSON.stringify(data)}; 
$.post("get_note.php", postdata, function(data){ 
    $('#note').text(data); 
}); 

</script> 

<?php 

print_r(json_decode($_POST['data'])); 
?> 

このソリューションは、このソリューションがうまくいかない新しいブラウザ(ネイティブJSONサポートあり)に適しています。ブラウザでJSONサポートの詳細

あなたはここで読むことができますようにIE7やIE8など

http://en.wikipedia.org/wiki/JSON#Native_encoding_and_decoding_in_browsers

+0

あなたはちょうど上記の答えをコピーしたように。 – Stephen305

+0

@ Civil777、それはクールです。より多くのコードでは少し違うテイクです。そして、我々は丸い答えを得るためにここでお互いから借りる。 "太陽の下では新しいものはありません"(伝道1:9)。 :) –

+0

それは私がそれをコピーしたようなものではありませんでした。私がこれを書いて始めたとき、私は他の解決策を見なかった(それは同時に起こった)。人々が同じことを考えていることは当然のことです。 –

関連する問題