1. ホーム
  2. jquery

[解決済み】$.ajaxのエラーがタイムアウトかどうかを判断する

2022-04-09 12:29:28

質問

の魔法を利用しています。 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); }
   });

});

タイムアウトをもっとうまく使う方法をご存知の方はいらっしゃいますか?

どのように解決するのですか?

エラーイベントハンドラが3つの引数(xmlhttprequest, textstatus, message)を取る場合、タイムアウトが発生するとstatus 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'のテキストステータスが返されるはずです。

お役に立てれば幸いです。