• ベストアンサー

jQueryの$.postの戻り値による条件分岐

jQueryの$.postにてPHPファイルをリクエストしています。 Ajax→PHPの処理後、Ajaxに処理が戻る際にPHPからAjaxに 値を受け渡し、さらにその値によってAjaxの処理を条件分岐させたい場合 どのような記述になるのでしょうか。 PHPからの戻り値は単なるテキストかtrue/falseで考えています。 それとも、そもそも$.postでは戻り値を処理する、 といった事はできないのでしょうか。

  • SOU48
  • お礼率35% (51/144)
  • AJAX
  • 回答数2
  • ありがとう数17

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.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)
回答No.1

$.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"); // ここから下には何も書かない。続きは上述のコールバック内に書く ---ここまで--- といった感じで。

SOU48
質問者

補足

有り難うございます。 仰るとおりコールバックで実現できそうです。 なお、例えばPHPから配列データをAjaxに返す場合 それをAjaxで参照するとなると、どのようになるのでしょうか。 引き続き教えて頂けますと助かります。 宜しくお願い申し上げます。

関連するQ&A

  • javascript関数の戻り値でphpの条件分岐

    こんばんは。 またまたプログラミングで詰まってしまいました・・・。 <?php    echo "<script> funcJS(); </script>"; //javascriptの関数。戻り値true/false    if(funcJS()の戻り値がtrueかどうか){       <~phpの処理~>     } ?> のようなプログラムがあったとして、funcJS()の戻り値の値によって、『phpの処理』を行うかどうかを決定したいのですがそのアルゴリズムが思いつきません。 色々と試行錯誤はやってみて、 (1)phpの変数にfuncJS()の戻り値を格納して、if文で条件分岐  $value = "<script> funcJS(); </script>";   しかし、これは$valueに戻り値を入れることができませんでした。 (2)javascript変数に戻り値を格納して、javascript内のif文で条件分岐 <?php    echo "<script> var value=funcJS(); </script>"; //javascriptの関数。戻り値true/false    echo "<script> if(value == 'true'){ </script>";       <~phpの処理~>    echo "<script> } </script>"; ?>  これも"}"がないと怒られてしまいました。 自分で思いつく限りは試してみたのですが、他に方法が思い浮かばず頭を抱えている状態です。 何か良い方法を知っている方、思いついた方、よろしくお願いします。

  • jqueryの$.ajaxでPHPに値を渡したい

    下記の様にjquery(ver1.4.x)の$.ajax関数を使って、 ajaxでPHPに値を渡したいと思っています。 ■Javascript (中略) $.ajax({ type:"POST", url:"test.php", data:{"check":check}, success:function(){ alert("OK"); } }); ■PHP(test.php) if ($_POST) { $_SESSION["data"][] = $_POST["check"]; } この時、普通の状態ならtest.phpで値が受け取れ、$_SESSION["data"]の配列内には$_POST["check"]の値が格納される事を確認しました。 しかし、ブラウザのCookieを無効(ブロック)に設定した場合のみ、$_SESSION["data"]の中には$_POST["check"]の値が入らないのです。 session_start();はJavascriptのあるHTML、test.php両方に書かれています。 クッキー無効の場合はJavascript(ajax)-PHP間でセッションは切断されてしまうのでしょうか? php.iniの設定では session_use_cookiesもsession_use_only_cookiesもOnになっています。 詳しい方おられましたらご教授宜しくお願いします。

    • ベストアンサー
    • PHP
  • jQueryの戻り値がうまくいかない・・・

    jQueryでXMLを読み込んでパースした値を戻り値として返す関数を作っているのですが、なぜか動作しません。 すみませんがどこがいけないのか教えていただけないでしょうか? -- JS ---------------------- function getValueXML(){   var value = "初期値";   jQuery.ajax({     url: "/text.xml",     type: 'get',     dataType: 'xml',     timeout: 1000,     success: parse_suc,     error: parse_err   });   function parse_suc(xml){    value = $(xml).find("hoge").text();   }   function parse_err(){    alert("XMLの取得に失敗しました");   }   return value; } -- test.xml --------------------- <?xml version="1.0" encoding="UTF-8"?> <root>   <hoge>テスト</hoge> </root> このgetValueXML関数を実行すると戻り値には"初期値"が返ってきます。 試しにparse_suc関数を以下のようにしてみたら"テスト"がアラート表示されました。 つまりparse_suc関数内ではXMLのパースがうまくいっているようなのです。 function parse_suc(xml){   value = $(xml).find("hoge").text();   alert(value); } しかしparse_suc関数を出るとvalueにはその値が引き継がれません。 valueのスコープがjQueryだとどういう風になっているのかよくわからなく、ずっと悩んでいます。 お手数ですがおわかりの方がいましたらご説明頂ければと思います。

  • 途中経過を表示させる方法は?

    JavaScript(jQuery) から $.ajax() で php の実行結果を受け取る作業をしています。 var msgObj = $("#result"); msgObj.text('処理中 ...'); setTimeout(function(){ $.ajax({ url: "hoge.php",type:"POST", async:true, cache:false, success: function(e){ msgObj.text(e); } }); }, 10); [hoge.php]  (処理1)  echo "処理1完了";  (処理2)  echo "処理2完了";   : hoge.php の処理が時間かかることを想定して、途中経過を表示させたいのですが、どのようにすればよいのでしょうか。 よろしくお願いします。

  • Ajax・jQueryでGETとPOSTする方法

    画像をクリックしたときにjQuery,Ajaxを利用してGET/POSTをしたいです。 POSTとGETは良く使うので今回両方の流れを知りたいと思います。 PHPではPOST、GETは使うことができます。javascript,jQueryはちょっと触ったことのある程度です。 フォームに値を入力してjQueryとAjaxでPOSTでデータを送るのは下記ホームページを参考にしてみたら成功しました。 http://webcake.no003.info/webdesign/jquery-ajax-php-post-sample.html 今回は下記のような複数のパラメータを送信したいと思います。 画像Aをクリックした時にkeyword=aaaa,cate=1 画像Bをクリックした時にkeyword=bbbb,cate=2 画像Cをクリックした時にkeyword=cccc,cate=3 今までPHPでGETを使っていた時のHTML部分です↓ <a href="index.php?keyword=aaaa&cate=1"><img src="images/a.jpg"></a> <a href="index.php?keyword=bbbb&cate=2"><img src="images/b.jpg"></a> <a href="index.php?keyword=cccc&cate=3"><img src="images/c.jpg"></a> 「send.phpファイル」 <?php //POSTでデータが送られた場合 echo $_POST['keyword'].'<br>'; echo $_POST['cate'].'<br>'; //GETでデータが送られた場合 echo $_GET['keyword'].'<br>'; echo $_GET['cate'].'<br>'; ?> ==GET================================================================ (HTML部分) <a href="index.php?keyword=aaaa&cate=1"><img src="images/a.jpg"></a> の記載方法だと、クリックしたときにアドレスバーにアドレスが入力されるのでページが切り替わってしまいAjaxにならないので違う形にする必要があると思いますがどのようにkeyword,cateのパラメータを持たせればよいのでしょうか? または、この形のままで良く、リンクした時にページが飛ばないような処理方法があるのでしょうか?(またはAjaxではあまりGETは使わないのでしょうか?) 上記に記載した、POSTの参考例のソースを記載します。 GETの場合にどのように変えたらよいのでしょうか。 $(document).ready(function() { var data = {request : $('#request').val()};//GETで複数値対応に書き換えが必要。 $.ajax({ type: "GET", url: "send.php", data: data, success: function(data, dataType) { $( '#test' ) . html( data ); },error: function(XMLHttpRequest, textStatus, errorThrown) { this; alert('Error : ' + errorThrown); } }); }); ==POST================================================================ (HTML部分) formを使う形になると思いますが、どのような書き方が良いのか教えて下さい。 画像を使うと下記のようになるとは思いますが、A,B,Cそれぞれにkeyword,cateの情報をどのように持たせておいたらよいのかがわかりません。 <form> <button type="submit" name="" value="*****"><img src="sample.gif"></button> </form> (jQuery部分) $(document).ready(function() { var data = {request : $('#request').val()};//POSTで複数値対応に書き換えが必要。 $.ajax({ type: "POST", url: "send.php", data: data, success: function(data, dataType) { $( '#test' ) . html( data ); },error: function(XMLHttpRequest, textStatus, errorThrown) { this; alert('Error : ' + errorThrown); } }); }); 以上、よろしくお願い致します。

    • ベストアンサー
    • AJAX
  • jqueryとphpで変数をやり取りしたい

    jqueryとphpで変数をやり取りしたい こんばんは 現在jqueryとphpのやり取りを模索しています phpで定義した変数(仮に$dataPHPとして)に文字列を入れておきます それを外部のjqueryにどうにかして渡す(この『渡す』方法が分からない・・・) そして、jquery内で受け取った変数から色々処理をして、最終的に今度は別の変数(また仮に$dataJQUERYとします)をPHPに渡します PHPではその変数を受け取り、以降の処理を進めていく、というものです 『jquery php データ 渡す』などで調べてみると、$.ajaxや$.postを使うとデータを渡せるとあり、実際にサンプルプログラムを動かしてみました しかし、javascriptからphpにデータを送ることはできても、コールバック関数というものでjavascriptに返ってきたり、innerHTMLで直接埋め込んでしまったりと、純粋に変数として保持できる方法が見つかりませんでした jqueryとphpで自由に変数を渡しあえる方法はないのでしょうか? 現在の環境はjquery1.4.2、php5、apache2、IE7です どうぞご教授願います

  • jQueryでテキストファイルを読むには?

    jQueryでテキストファイルを読みたいです。 こちら(https://ghweb.info/post-2976.html)などを参考に色々試しましたが読めませんでした。 エラーは出ていません。 試したのは$.getと$.ajaxです。 テキストファイルは文字コードutf-8、bom無しです。 そもそもjQueryでテキストファイルは読めるのでしょうか?

  • ブックマークレットで他ドメインのPHPにpost

    以前、「今開いているページのhtmlソースをPHPにpostしたい」という質問をしました。 http://okwave.jp/qa/q8013399.html ブックマークレットを使えばできるのでは?という回答を頂きました。 javascriptでhtmlソースは取得できたのですが、PHPにpostする部分がわかりませんので教えて下さい。 取得したいページは実行したいPHPファイルがあるドメインとは別のドメインです。 jQueryのAjaxが使えるかな?と思って試してみましたがPHPは動作していないようです。 一応そのときのブックマークレットの一部を載せます。 $.ajax({  type: 'POST',  url:'http://hoge.com/post.php',  data: {request: htmlSource},  dataType: 'html',  cache: false,  crossDomain: true,  success: function(data, textStatus){   alert(data);  },  error: function(data, textStatus) {   alert(textStatus);  } }); このブックマークレットを実行するとerrorというアラートのメッセージボックスが表示されます。 どうやらjQueryではできないっぽいのですが、ブックマークレットで他のドメインのPHPにデータをpostするのはどのような方法でやるのでしょうか?

    • ベストアンサー
    • PHP
  • JQueryでAjax通信をキャンセルした時につて

    JQueryでAjax通信時に、abort()でキャンセルを行うと通信はキャンセルになっているようですが、 サーバー側(Ajaxで呼ばれた処理)は、最後まで処理されてしまいます。 abort()を実行させた時に、サーバー側の処理まで中断させる方法はありますでしょうか? 実行と中止は以下のような感じで書いています。 Ajax実行 arrXhr = $.ajax({ dataType: "json", type: "POST", url: "xxxxxxx.php", async: true, cache: false, data: sendData, success: function ( data ) { }, error: function ( XMLHttpRequest, textStatus, errorThrown ) { } }); 中止 xhr.abort();

  • jqueryでtable内容の置き換え

    Jqueryを利用してAJAXでPOSTしてその計算結果をTableに埋め込もうとしています。 tableは複数行あり、入力フォームがあります。 その各行に入力された内容をPOSTしてPHPで計算します。 戻ってきた内容を同一行に埋め込もうとしています。 どのようにすればいいでしょうか? id="in1"とid="out1"というテキストボックスに入力しout1のテキストボックスからカーソルが外れると AjaxでPOSTします。 その計算結果をid="result1"に表示します。 このような行が50行あります。 50回ajaxの処理を書くのはおかしいかなと思いつつもどのようにしていいのかわかりません。 教えてください。 よろしくお願いいたします

    • ベストアンサー
    • AJAX