• ベストアンサー

ajax 通信成功時

ajaxで通信成功時のみに、通信終了後に関数を実行したいです。 通信が成功・失敗どちらでも、終了後に実行はcompleteでできますが、 成功時のみは、どのように書けばよいでしょうか? よろしくお願いします。 $.ajax({ type: 'GET', success: function () { 略 }, error:function(){ } }

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

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> alwaysの処理は、done(通信成功)やfail(失敗)のどちらでも実行されます。 > これをdone(成功)の時のみに実行したいです。(通信完了時に) > 可能でしょうか? done(成功)の時のみに実行したいのであれば それはalwaysではなくてdoneの方に記述しましょう。 alwaysはいらないと思います。 $.ajax({ url: "test.php" }).done(function(data, status, xhr) { // 通信成功時の処理 // 通信完了時の処理 }).fail(function(xhr, status, error) { // 通信失敗時の処理 });

hp_win7
質問者

お礼

ご回答ありがとうございます。 助かりました。

その他の回答 (1)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

$というオブジェクトは組み込みオブジェクトとしては存在しないので、 使っているライブラリを明記してください。 とりあえず、 jQuery.ajax(options) - jQuery 日本語リファレンス http://semooh.jp/jquery/api/ajax/jQuery.ajax/options/ を使っているとします。 質問文中に記載の記述で 成功時には  success: function () {  略  }, ここで指定している関数が実行されます。 なので、すでに目的は達成できていると思います。 それとも成功の定義がjQuery.ajaxが定義している成功とは異なるのでしょうか? その場合は、何を持って成功とするのかを明示してください。

hp_win7
質問者

お礼

ご回答ありがとうございます。 質問文に不備があり、大変申し訳ありませんでした。 >使っているライブラリ jQueryです。 質問文のコードをjQuery 1.8以降に対応するために変更します。 $.ajax({ url: "test.php" }).done(function(data, status, xhr) { // 通信成功時の処理 }).fail(function(xhr, status, error) { // 通信失敗時の処理 }).always(function(arg1, status, arg2) { // 通信完了時の処理 }); 上記のコードでは、 alwaysの処理は、done(通信成功)やfail(失敗)のどちらでも実行されます。 これをdone(成功)の時のみに実行したいです。(通信完了時に) 可能でしょうか?

関連するQ&A

  • 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();

  • ajaxでapi

    ajaxでapiから値を取得しています。 初心者で申し訳ありませんが、ajaxは非同期の通信を利用しているようですが、 同期かつリフレッシュなしで値を取得できないのでしょうか? よろしくお願いします。 function startWave(){ var arry=["a","b","c"]; for(var i=0;i<arry.length;i++){ dotAjax(arry[i]); } } function dotAjax(str){ $.ajax({ type: 'GET', 略 success:function( aのajax処理が終わったら、bのajax処理を行いたい } } }

    • ベストアンサー
    • AJAX
  • ajax api

    ajaxでapiから値を取得しています。 初心者で申し訳ありませんが、ajaxは非同期の通信を利用しているようですが、 同期かつリフレッシュなしで値を取得できないのでしょうか? よろしくお願いします。 function startWave(){ var arry=["a","b","c"]; for(var i=0;i<arry.length;i++){ dotAjax(arry[i]); } } function dotAjax(str){ $.ajax({ type: 'GET', 略 success:function( aのajax処理が終わったら、bのajax処理を行いたい } } }

  • ajaxのレスポンスが取得できない。

    環境【cakePHP2.X, PHP5.5】 cakephpでajaxを試みてますがうまくいきません。 あるサンプルを参考にして ボタンのクリックをトリガに ajaxMethod()を走らせて alertで"tanaka"を表示させたいのですが なぜかOeders/index.ctpのhtmlを 取得し、長々と表示されてしまいます。 意図した結果を取得できるよう アドバイスを戴けたら嬉しいです。 よろしくお願いします。 【OrdersController.php】 class OrdersController extends AppController { function index() { //初期表示処理 } /** * Ajax用関数 */ function ajaxTest() { $this->autoRender = FALSE; if($this->request->is('ajax')) { return $this->data['name']."さん、こんにちは"; //echoでもOK } } } 【add.ctp】 function ajaxMethod() { $.ajax({ url: "Orders/ajaxTest", type: "POST", data: { name : "tanaka" }, dataType: "text", success : function(response){ //通信成功時の処理 alert(response); }, error: function(){ //通信失敗時の処理 alert('通信失敗'); } }); }

  • AJAXの書き方について

    <script type="text/javascript"> $( function() { $( '#ajax-button' ) .click( function() { $.ajax({ url: 'http://localhost:8080/app/family', type:'GET', data: {test1 : 'aaa', test2 : 'bbb' }, dataType: 'jsonp', success: function(data) { alert("ok"); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("ng"); } }); }); } ); </script> この部分は何を意味しているのでしょうか? $( '#ajax-button' ) .click( またここの部分をIDにして二つ別々のIDを書いてblur(fn()にしたい場合はどうすればいいのでしょうか? $("[id$=NO]").blur(function(){ $("[id$=NM]").blur(function(){ function() { $.ajax({ url: 'http://localhost:8080/app/family', type:'GET', data: {test1 : 'aaa', test2 : 'bbb' }, dataType: 'jsonp', success: function(data) { alert("ok"); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("ng"); } }); }); }); }); このようにしても動きません。 正しい書き方を教えていただきたいです。

  • jqueryのajax()内からグローバル配列に

    jqueryのajax(){success: function()内からグローバル連想配列に値を格納したい。 jqueryのajax()でhtmlファイルを読み込み配列に格納。 その後他の関数で使いたいと考えていますが グローバル連想配列に格納できません。 success: function()内でさらに関数を定義もして見ましたが反応せず。。。 (プルダウンメニューを変更したら実行する関数) 以下ソースになります。 ----------------------------------------------------------- $(function() { objectarray = new Object(); $.ajax({ type: 'GET', url: 'hoge.html', dataType: 'html', success: function(data) { var text = [];   $(data).each(function(i){ text = $(this).text().split("\n"); }); var alldata = $.grep(text, function(e){return e;});//空白やデータなしを削除 for(i=0; i<alldata.length; i++){ objectarray[i] = (alldata[i]); alert("forの中" + objectarray[i]);//取得できた } alert("forの外" + objectarray);//取得できた return objectarray;//あってもなくても変わらない。。。 }, error:function() { alert('問題がありました。htmlデータがありませんでした。'); }             //return objectarray;←有効にするとjsが認識されなくなります。 }); alert("ajaxの外" + objectarray[0]);//何も表示されない、firebugでみるとobjectarrayには値が入っている。 }); ----------------------------------------------------------- 上記はnew Object()でやっておりますがnew Array()でも同じ結果でした。 回避策をご教授いただけましたら幸いです。 どうぞよろしくお願いいたします。

  • Jquery.ajaxでHTML読み込み

    現在、Jquery.ajaxを使って外部HTMLの読み込み処理を行い、処理完了後にフェードで表示させるということをしているのですが、読み込んだHTMLに貼り付けてある画像が読み込まれる前にHTMLが表示されてしまい、困っています。 Jquery.ajaxでは内包されている画像の監視まではできないのでしょうか? 下記が今作っているコードです。 $contest.css({ "opacity": 0 }); $.ajax({ type: "GET", url: "hoge.html" dataType: "html", success: function(data) { $contest.html($(data).find("#hoge")); }, complete: function() { $contest.stop().animate({ "opacity": 1 }, 1000, "easeOutCubic"); } }); おわかりになる方、ご教授お願いします。

  • jqueryのAJAXで通信が完了した時のアラートをLightbox風

    jqueryのAJAXで通信が完了した時のアラートをLightbox風に表示したい。 コード <script type="text/javascript"> //<![CDATA[ $(function(){ $('#exebtn').click(function() { $.ajax({ type: "post", url : "sendmail.php", data : { message: $('#message').val(), exebtn:$('#exebtn').val()}, datatype:'text', //ここの部分をどう変えれば出来るのでしょうか? success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> </script> ご教授、宜しくお願い致します。

    • ベストアンサー
    • AJAX
  • prototypeでajaxをする時に、onSuccessで指定した関数の戻値を取得する方法

    こんにちは、Ajax初心者です。 prototypeでAjaxをする時に、 new Ajax.Request(url, { method: 'get', onSuccess: getDat, onFailure: showErrMsg, parameters: paramList }); と言う風に書きますが、通信が成功した時に実行されるonSuccessのgetDataと言う関数の戻値を取得したいのですが、どうすればよいのでしょうか? 自分なりに調べてみると、prototypeのbindを使えばいけそうな感じなのですが、bindの使い方も良く分かりません(いろいろ調べてみたのですが、、、)。どうか詳しい方お願いします。

  • ajax通信の戻り値が空になる。

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="jquery.xdomainajax.js"></script> <!-- 追加 --> <script type="text/javascript"> $.ajax( { url: URL, type: 'GET', cache: false, dataType: 'xml' } ) .done(function(res) { console.log(res); } ) .fail(function(res) { console.log('FAIL') } ); </script> </head> 上記のコードの通り(url部分は明記を省略)、jquery.xdomainajax.jsを用いたajax通信を行いたいのですが、通信は成功しているもののコンソールを見ると以下のようになっています。 Object { query: Object, results: Array[0] } 本来ならresultsの部分に返り値が格納されるのですが、空になってしまいます。 なにか原因があればご教授頂きたいです。よろしくお願い致します。

専門家に質問してみよう