如果请求时间超过500毫秒,则调用一个函数

时间:2016-06-07 20:39:00

标签: jquery ajax

有没有办法调用一个函数,例如,一个插入加载GIF的函数,如果一个ajax请求花了超过指定的时间长度?如果请求在该时间结束之前完成,也不应该调用它。

我在考虑使用setTimeout 500ms然后在成功回调中销毁它,这意味着如果在500ms结束之前它被销毁,它可能无法运行。

编辑:我不希望请求在此500ms后失败。它应该继续运行。

2 个答案:

答案 0 :(得分:3)

保留ajax请求并在500ms后调用函数

要在500ms后执行该功能并保持请求处于活动状态,请使用setTimeout()

$.ajax({
    url: "hodor.html",
    error: function () {
        clearTimeout(timeoutID);

    },
    success: function () {
        clearTimeout(timeoutID);

    }
});

var timeoutID = setTimeout(function () {
    console.log("The timeout passed");
}, 500);

中止ajax请求并在500ms后调用函数

使用内置timeout处理的ajax。以ms为单位设置timeout并设置error回调函数。使用t确定回调中的超时:

$.ajax({
    url: "hodor.html",
    timeout: 500,
    error: function(x, t, m) {
        if (t === "timeout") {
            // Timeout
        } else {

        }
    },
    success: function(){

    }
});

答案 1 :(得分:-1)

jQuery ajax定义提供了一个名为timeout的属性。如果超时,它将转到您的错误回调,之后它将转到您的完成/完成。你可以看一下。

根据jQuery Spec

  

设置请求的超时(以毫秒为单位)。这将覆盖使用$ .ajaxSetup()设置的任何全局超时。超时时间从$ .ajax调用点开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。在jQuery 1.4.x及更低版本中,如果请求超时,XMLHttpRequest对象将处于无效状态;访问任何对象成员可能会抛出异常。仅在Firefox 3.0+中,超时无法取消脚本和JSONP请求;即使在超时时间之后到达,脚本也会运行。

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

希望这有帮助。

快乐学习:)