【问题标题】:If ajax isn't successful after an interval how do I cancel it and perform an operation?如果 ajax 在间隔后不成功,我该如何取消它并执行操作?
【发布时间】:2015-05-01 06:28:26
【问题描述】:

我有一个看起来像这样的 jQuery ajax 调用:

jQuery( document ).on( 'mouseover', '#wp-admin-bar-noti-bar-new', function() {

  jQuery.ajax({
    url: "domain.com",
    // etc
    success:function(data){

        // change element id
        jQuery('#wp-admin-bar-noti-bar-new').attr('id','wp-admin-bar-noti-bar');
    }
  });
});

所以如果 ajax 调用成功,它会改变元素。我的问题是,我该如何做到这一点,如果 10 秒后呼叫不成功,它应该 取消它 并做一些事情(如显示警报)。

我该怎么做?

【问题讨论】:

标签: jquery ajax


【解决方案1】:

您可以在 AJAX 调用上设置 timeout 并处理该错误情况。

jQuery.ajax({
    url: 'domain.com',
    timeout: 10000, // ten seconds in milliseconds
    .
    .
    .
    error: function(request, status, err) {
        if (status === "timeout") {
            alert("Timeout");
        }
    }
});

注意,我部分使用了this answer 来制定我的答案。

一旦发送 AJAX 请求,它们就会被发送。你不能在服务器端对它们做太多的事情(参见this answer)。

但是,您可以在客户端取消它们。 request 参数是一个 jqXHR 对象,它允许您使用 request.abort(); 中止调用,因此您的函数看起来会有所变化像这样:

error: function(request, status, err) {
    if (status === "timeout") {
        request.abort();
        alert("Timeout");
    }
}

【讨论】:

  • 但这会中止最初的ajax调用吗?
  • @Musa 没有,我忘记添加函数参数了。
  • 据我所知,它确实处理了超时,但它会取消初始调用吗?
  • @HenrikPetterson,你真的不能“中止”一个 ajax 请求。当它被触发到服务器时,您不再控制该过程。但是您可以中止 javascript 层上的绑定。
  • 谢谢你,这是一个很好的解释。唯一的问题是我刚刚运行了您的代码,但它不起作用,请在此处查看我的完整代码:pastebin.com/g7nJnPZn 我是否正确放置了您的代码?我怀疑某处有错误?
猜你喜欢
  • 2016-05-31
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多