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

Hen*_*son 2 ajax jquery

我有一个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');
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

因此,如果ajax调用成功,则会更改元素.我的问题是,我如何做到这一点,如果10秒后呼叫失败,它应取消它并做一些事情(如显示警报).

我怎样才能做到这一点?

Sum*_*ans 5

您可以设置timeoutAJAX调用并处理该错误情况.

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

请注意,我在一定程度上使用了这个答案来表达我的答案.

一旦发送了AJAX请求,就会发送它们.你不能在服务器端对它们做太多的事情(参见这个答案).

但是,您可以在客户端取消它们.request参数是一个jqXHR允许您使用中止调用的对象,request.abort();因此您的函数将如下所示:

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