web-dev-qa-db-ja.com

$ .ajaxエラーがタイムアウトかどうかを確認

私は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); }
   });

});

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

194
coffeemonitor

タイムアウトが発生したときにエラーイベントハンドラが3つの引数(xmlhttprequest、textstatus、およびmessage)を受け取ると、ステータスargは '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'というテキストステータスがエラーハンドラに返されるはずです。

お役に立てれば!

342
David Hoerster