$ .ajaxエラーがタイムアウトかどうかを判別する


205

の魔法を利用していjQuery.ajax( settings )ます。

しかし、誰かがタイムアウト設定で多く遊んだのではないかと思いますか?

基本的にリクエストのローカル時間を指示するためのものであることはわかっていますが、タイムアウトに達した場合に何かをトリガーできますか?それとも単に応答を聞くのをやめるのですか?

jQueryサイトを読むと、引数が渡されていないことがわかります。そのため、1つの機能を持つ単純な設定のように見えます。結構です。

しかし、タイムアウトに達した場合にアラートまたは何らかの機能をトリガーしたいと思います。この場合、エラー設定がトリガーされないことがわかります。

これが私のスニペットです:

$("form#testform").submit(function(){ 

 var allFormValues = $("form#testform").serialize(); 

   $.ajax({
    cache:false,
    timeout:8000,  // I chose 8 secs for kicks
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ alert(response); }
   });

});

誰かがタイムアウトでもっと働く方法を知っていますか?

回答:


356

タイムアウトが発生したときにエラーイベントハンドラーが3つの引数(xmlhttprequest、textstatus、およびmessage)を取る場合、ステータス引数は 'timeout'になります。

jQueryドキュメントごと:

2番目の引数(null以外)の可能な値は、「timeout」、「error」、「notmodified」、および「parsererror」です。

その後、それに応じてエラーを処理できます。

これを示すフィドルを作成しました。

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

jsFiddleを使用すると、ajax呼び出しをテストできます。応答するまで2秒待機します。タイムアウト設定を1秒に設定したので、エラーが発生し、「timeout」のtextstatusがエラーハンドラーに渡されます。

お役に立てれば!


3
うまくいきました!ええ、それらはドキュメントでこれらのステータス値を隠しているのです。
David Hoerster 2010

102
彼らはドキュメンテーションで多くを隠します。
アーロン

4
@JochemKuijpers Fiddlerは2秒待機するため、1秒のタイムアウトが満たされます。読む....
Rickjaah 2013

2
x、t、mの変数は何ですか?
バート

3
(x)mlhttprequest、(t)extstatus、(m)essage
JupiterP5
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.