ajax(jQuery)のタイムアウトを設定する


194
$.ajax({
    url: "test.html",
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

時にはsuccess機能は時々 、良いではない動作します。

このajaxリクエストのタイムアウトを設定するにはどうすればよいですか?たとえば、3秒でタイムアウトになった場合、エラーが表示されます。

問題は、ajaxリクエストが完了するまでブロックを凍結することです。サーバーが少しの間停止している場合、それは決して終わりません。


2
,後に必要があり}ます。
pimvdb 2011年

2
この>を見てみましょうstackoverflow.com/questions/12930759/...
バフラム

回答:


328

$.ajax ドキュメントを読んでください。これは対象トピックです。

$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});

error: function(jqXHR, textStatus, errorThrown)オプションのtextStatusパラメータにアクセスすると、どのタイプのエラーがスローされたかを確認できます。オプションは、「timeout」、「error」、「abort」、および「parsererror」です。


4
タイムアウトエラーキャッチに関するstackoverflow.com/questions/3543683/...を
エイドリアンはして

1
私にはうまくいかないようです、タイムアウト:1、パスされたことを確認しましたが、タイムアウトすることはありません
PandaWood

$ .ajax呼び出し全体を必ずtry / catchでラップしてください。アボートはjQueryによってキャッチされず、$。ajax呼び出しの外でスローされます。
justdan23

112

jQueryの新旧のパラダイムでのタイムアウトの設定と検出を示すいくつかの例を次に示します。

Live Demo

jQuery 1.8以降での約束

Promise.resolve(
  $.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
  })
).then(function(){
  //do something
}).catch(function(e) {
  if(e.statusText == 'timeout')
  {     
    alert('Native Promise: Failed from timeout'); 
    //do something. Try again perhaps?
  }
});

jQuery 1.8以降

$.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
}).done(function(){
    //do something
}).fail(function(jqXHR, textStatus){
    if(textStatus === 'timeout')
    {     
        alert('Failed from timeout'); 
        //do something. Try again perhaps?
    }
});​

jQuery <= 1.7.2

$.ajax({
    url: '/getData',
    error: function(jqXHR, textStatus){
        if(textStatus === 'timeout')
        {     
             alert('Failed from timeout');         
            //do something. Try again perhaps?
        }
    },
    success: function(){
        //do something
    },
    timeout:3000 //3 second timeout
});

textStatus param(またはjqXHR.statusText)がエラーの内容を通知することに注意してください。これは、タイムアウトが原因で障害が発生したことを知りたい場合に役立ちます。

エラー(jqXHR、textStatus、errorThrown)

リクエストが失敗した場合に呼び出される関数。関数は3つの引数を受け取ります。jqXHR(jQuery 1.4.xではXMLHttpRequest)オブジェクト、発生したエラーのタイプを説明する文字列、およびオプションの例外オブジェクト(発生した場合)。2番目の引数(null以外)の可能な値は、「timeout」、「error」、「abort」、および「parsererror」です。HTTPエラーが発生すると、errorThrownは「Not Found」や「Internal Server Error」などのHTTPステータスのテキスト部分を受け取ります。jQuery 1.5以降、エラー設定は関数の配列を受け入れることができます。各関数が順番に呼び出されます。注:このハンドラーは、クロスドメインスクリプトおよびJSONPリクエストでは呼び出されません。

src:http : //api.jquery.com/jQuery.ajax/


違いは何だ$.ajax().fail()とは$.ajax().error()
アレハンドロガルシアイグレシアス


3
jQuery 1.8以降を含めるための+1。同様の質問に対する他のほとんどの回答には、<からの成功/エラーのみが含まれます。
brandonscript 2013

22

次のtimeoutようなajaxオプションの設定を使用できます。

$.ajax({
    url: "test.html",
    timeout: 3000,
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

ここでajaxオプションについてすべてお読みくださいhttp : //api.jquery.com/jQuery.ajax/

タイムアウトが発生すると、errorハンドラーではなくハンドラーがトリガーされることにsuccess注意してください。


2

フル.ajax機能のjQuery関数を使用します。例としてhttps://stackoverflow.com/a/3543713/1689451と比較してください

テストせずに、参照されているSO質問とコードをマージするだけです。

target = $(this).attr('data-target');

$.ajax({
    url: $(this).attr('href'),
    type: "GET",
    timeout: 2000,
    success: function(response) { $(target).modal({
        show: true
    }); },
    error: function(x, t, m) {
        if(t==="timeout") {
            alert("got timeout");
        } else {
            alert(t);
        }
    }
});​

H-Bahramiとルドルフ・ミュールバウアー返事に感謝しかし、私はので、私のコードを明確にしてくださいAJAXで新しいです...私はすでにこれらの答えを見てきたので、私は助けに私を喜ばon..so起こっているのかわかりません...

.load()でどのように実行できますか?可能かどうか?

@SS、ロードのドキュメントでタイムアウトを探してみてください:api.jquery.com/load- そして、コードにタイプミスがあり、修正しました。
RudolfMühlbauer、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.