【问题标题】:cancel ajax() success取消 ajax() 成功
【发布时间】:2023-03-31 02:25:01
【问题描述】:

我正在使用动态分页。

在开始另一个之前,我需要取消 jQuery ajax 中的 success 事件。

我已经设置了一个等于$.ajax()的变量,在这样做之前,无论如何我都会调用abort

问题是success 仍然会触发。

Ajax: How to prevent jQuery from calling the success event after executing xmlHttpRequest.abort(); 的答案是错误的,或者至少它对我不起作用,因为如果我在 ajax 之后立即触发 abort,则不会发生任何事情。

我只希望ajax 变量的success 在另一个即将启动时不触发。

代码片段:

if(updatePageAJAX){
    updatePageAJAX.abort();
}

updatePageAJAX = $.ajax({
});

如果您愿意,我可以提供更多详细信息,但 updatePageAJAX 有效。我无法告诉你abort 是否有效。我在if 中放了一个alert,看看它是否会触发;确实如此。

如果我在设置updatePageAJAX = $.ajax 之后立即输入abort,则不会发生任何事情。

【问题讨论】:

  • 这个问题的答案在很多情况下都对我有用......你能发布一些代码吗?也许问题出在其他地方。

标签: javascript jquery ajax


【解决方案1】:

您是否尝试过将您的 xhr 对象保存在一个变量中,以便您可以检查成功回调是否是正确的 xhr 对象? 例如:

$(function() {
    var xhr = null;

    $('.link').click(function() {
        var page = $(this).text();
        if(xhr != null) {
            xhr.abort();
        }
        xhr = $.ajax({
            type: 'GET',
            url: 'index.php',
            data: 'js=true&page=' + page,
            success: function(data, responseCode, jqxhr) {
                if(xhr == jqxhr) {
                    $('#page').text(data);
                    xhr = null;
                }
            }
        });
    });
});

这样,如果这不是正确的请求,成功回调将不会执行。

【讨论】:

  • 感谢您的尝试!不幸的是,这行不通。在调用 success 函数之前,xhr 不会等于 jqxhr 吗?
  • 是的,它会相等,但是当“另一个即将开始”时,您可以将 hxr 变量设置为 null,这样条件 xhr == jqxhr 将为 false。在此示例中,xhr 变量由 AJAX 调用设置,因此如果几乎同时进行两个 AJAX 调用,则只有后者会在 xhr 变量中,因此第一个成功回调不会执行,因为存在错误条件。你不能在你的代码中做这样的事情吗?如果不是,为什么?
  • 我试过你的代码,但它不起作用。 jqXHR 中是否有任何可以区分每个 ajax 调用的内容?可以手动设置吗?
  • 这对我有用。即使所有 xhr 看起来都相等存在问题,您也可以在 ajax() 调用之后立即执行“xhr.stamp = new Date().getTime()”之类的操作,然后比较成功回调中的标记值.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 2023-03-25
  • 2014-07-27
  • 1970-01-01
相关资源
最近更新 更多