代码之家  ›  专栏  ›  技术社区  ›  coffeemonitor

确定$.ajax错误是否为超时

  •  194
  • coffeemonitor  · 技术社区  · 14 年前

    我在利用 jQuery.ajax( settings )

    不过,我想知道是否有人玩了很多超时设置?

    我知道它基本上是用来为一个请求指定本地时间的,但是如果达到了超时时间,它能触发什么吗?或者只是停止倾听回应?

    但是,如果达到超时,我想触发一个警报或一些函数。在这种情况下,我可以看到错误设置没有被触发。

    以下是我的片段:

    $("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); }
       });
    
    });
    

    1 回复  |  直到 10 年前
        1
  •  359
  •   codescribblr    7 年前

    如果错误事件处理程序在发生超时时接受三个参数(xmlhttprequest、textstatus和message),则status arg将为“timeout”。

    根据 jQuery documentation :

    参数(除null外)为“timeout”, “错误”、“未修改”和 “解析器错误”。

    你可以相应地处理你的错误。

    我创造了这个 fiddle 这就证明了这一点。

    $.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秒钟才能响应。我将timeout设置为1秒,因此它应该出错并将textstatus“timeout”传递回错误处理程序。

    希望这有帮助!