- ベストアンサー
jQueryの$.postの戻り値による条件分岐
jQueryの$.postにてPHPファイルをリクエストしています。 Ajax→PHPの処理後、Ajaxに処理が戻る際にPHPからAjaxに 値を受け渡し、さらにその値によってAjaxの処理を条件分岐させたい場合 どのような記述になるのでしょうか。 PHPからの戻り値は単なるテキストかtrue/falseで考えています。 それとも、そもそも$.postでは戻り値を処理する、 といった事はできないのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> なお、例えばPHPから配列データをAjaxに返す場合 > それをAjaxで参照するとなると、どのようになるのでしょうか。 Ajax では、基本的には「テキストデータ」でしかデータのやりとりは出来ません。 そのため、PHP 側で配列データをテキストデータに変換し、JavaScript側でテキストデータを配列データに戻す、といった処理が必要になります。 元々、その「テキストデータ」フォーマットとしては XML が想定されていたのですが(AjaxのX)、複雑でオーバーヘッドが大きいので、最近はJSONが使われる場合が多いです。 http://gihyo.jp/dev/feature/01/jquery-ajax/0002 PHP側については、PHP 5.2.0 以降なら、json_encode で、配列をJSON形式に変換できます。 http://php.net/manual/ja/function.json-encode.php jQuery の Ajax ライブラリは、JSON に対応していますので、 $.post の第4引数を"json"にしておけば、 PHP側でJSON形式に変換した配列データを、 JavaScript側の$.post のcallback内では、引数 data がそのまま配列としてアクセス出来るようになります。 jQueryとPHP のJSONによる受け渡し例は、 http://www.rottel.net/kuwa/44111 なんかが参考になるでしょうか。
その他の回答 (1)
- mtaka2
- ベストアンサー率73% (867/1179)
$.ajax で、引数 async を false にしてリクエストを発行すれば、 関数呼び出し後に、リクエスト結果に基づいた条件分岐は可能です。 http://semooh.jp/jquery/api/ajax/jQuery.ajax/options/ ただし、リクエストを発行したあと、応答が戻ってくるまで スクリプト動作が止まってしまうため、操作性の問題からは あまりオススメできません。 できれば、その処理そのものはそこで終わらせておき、 続きは $.post の callback内に記述すべきでしょう。 ---ここから--- $.post("test.php",arg, function(data, status) { // 通信成功後の処理 if (data == "true") { PHP出力が「true」だった時の処理 } else { そうでない時の処理 } 続きの処理 }, "text"); // ここから下には何も書かない。続きは上述のコールバック内に書く ---ここまで--- といった感じで。
補足
有り難うございます。 仰るとおりコールバックで実現できそうです。 なお、例えばPHPから配列データをAjaxに返す場合 それをAjaxで参照するとなると、どのようになるのでしょうか。 引き続き教えて頂けますと助かります。 宜しくお願い申し上げます。