如果ajax在一段时间后没有成功,我该如何取消它并执行操作?

时间:2015-02-28 16:06:35

标签: jquery ajax

我有一个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秒后呼叫失败,它应取消并做一些事情(如显示提醒)。

我该怎么做?

1 个答案:

答案 0 :(得分:5)

您可以在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");
    }
}