みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

フォームからjQuery,jQuery.jsonを使ってJSONを作っ

フォームからjQuery,jQuery.jsonを使ってJSONを作ってPHPで表示したい。
こんばんは。2、3日ずっと悩んでて解決しないので助けてください。
jQuery,jQuery.jsonを使ってJSONを作成しています。
クリックイベントに
var form = $("#sform");
var json = $(form.serializeArray());
var strJson = $.toJSON(json);
という形をとって
$.ajax({
url : "request.php",
type : "post",
data : strJson,
success: function(request){
$('#result').html(request);
}
});
で送っています。
ただPHP側で
var_dump($_POST);
を行ってもArray ( ) と表示されます。
firebugで見たところpostに入っているデータは以下の通りです。
{"0":{"name":"date","value":"2010/09/15"},"1":{"name":"type","value":"new"},"2":{"name":"bin[]","value":"2"},"3":{"name":"bin[]","value":"3"},"length":4}

var_dumpで表示できないのはなぜでしょうか?
上記で変数json のまま送るとオブジェクトとして送れてvar_dump でも表示できます。
ただ今はjson の勉強をしているので、できればなぜこうなっているのかを理解したいです。
基本的なところで勉強不足かもしれませんが、何かアドバイスなど頂けると嬉しいです。
よろしくお願いします。

投稿日時 - 2010-09-15 22:53:09

QNo.6185309

困ってます

質問者が選んだベストアンサー

「var json = $(form.serializeArray());
このデータを送るのが一番標準ということでいいのでしょうか?」

=>そうです。わざわざJSONオブジェクトに作り変える必用は無いです。
  .serializeArray()で、jQueryが、JSON形式の文字列データに変換して
  くれてるんです。

「phpで json_decodeしなくてもデータがそのまま二次元配列で渡っている」

=>そう思ってもよいでしょう。正しくは、二次元配列の形式に格納する
  形式の文字列データで渡っているですが

 PHPで、
echo file_get_contents("php://input");
 として見れば、送信されてくる文字列データが見れます。

投稿日時 - 2010-09-17 11:55:43

お礼

お礼が遅くなってすみません。
本当にありがとうございます。
やっとこさ理解ができました。

自分で余計なことをしていたためにややこしかったんですね。

投稿日時 - 2010-09-18 23:04:37

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

GETやPOSTで送れるデータは、ストリング(文字列だけです。)

JSONを送受信するとは、JSON形式でテキストデータを
送受信するという事です。

javascriptオブジェクト(変数、配列、関数、DOM要素,json形式のobject...)を
そのままGET、POSTしても、結局 .toString() の値が渡される
だけだからだと思います。

var json = $(form.serializeArray());
はフォームの中身をJSON形式の文字列を生成してます。だから送れます。

var strJson = $.toJSON(json);
は、JSON形式の文字列からJSONオブジェクトを生成してます。
これは、文字列に戻さないと遅れません。
IE以外なら、

data:strJson.toSource()

でうまくいくんじゃないかと、

投稿日時 - 2010-09-16 09:14:15

補足

>JSONを送受信するとは、JSON形式でテキストデータを
>送受信するという事です。

ということは
var json = $(form.serializeArray());
このデータを送るのが一番標準ということでいいのでしょうか?
$.toJSON(json);
この作業が蛇足で、これを行っているからうまくいかないと今は考え始めています。
ただ、phpで json_decodeしなくてもデータがそのまま二次元配列で渡っているということはJSONではないのですよね。


Google Chromeですがdata:strJson.toSource();を行ってみましたがダメでした。
何も変わらずでした。

現状var json = $(form.serializeArray());で渡せばそのまま何の問題もなくphpで作業できます。
phpからJSONを返す作業も問題なくいっています。
ただvar json = $(form.serializeArray());ということろがJSONを送っているのかが分からないという状況です。

投稿日時 - 2010-09-16 14:03:46

お礼

アドバイスありがとうございます。
少し分かってきた気がします。

投稿日時 - 2010-09-16 13:57:35

あなたにオススメの質問