【问题标题】:How to abort list of all the pending ajax requests using jquery?如何使用 jquery 中止所有未决 ajax 请求的列表?
【发布时间】:2017-10-07 16:10:46
【问题描述】:

这是我的功能

  var xhr;
    function abortAjax() {
        $.each(xhrPool, function(idx, jqXHR) {
            jqXHR.abort();
        });
    }
    $(document).ready(function() {
        fn = function() {
            xhrPool = [];
            xhr = $.ajax({
                url: '/getUrl',
                beforeSend: function(jqXHR) {
                    xhrPool.push(jqXHR);
                },
                complete: function(jqXHR, data) {
                    if (jqXHR.statusText != "error") {
                        //my functions
                    }
                }
            });
        };

        var interval = setInterval(fn, 5000);
    });

    function abort_allAjax(){     
      //I need to make fresh ajax call when it enters this function      
        function abortAjax();
        fn();
    }

fn 是我更新表格数据的函数。它每 5 秒更新一次。会有很多待处理的 ajax 请求。

当我调用 abort_allAjax() 函数时,需要更新新数据,因此我需要中止所有待处理的请求并进行新的 ajax 调用。

我尝试使用

 function abortAjax() {
        $.each(xhrPool, function(idx, jqXHR) {
            jqXHR.abort();
        });
    }

但它只中止了最后一个 ajax 调用。如果有人有想法或任何工作示例来中止所有 ajax 调用,请帮助我!提前非常感谢!

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

fn 函数之外定义xhrPool = []xhrPool 在每次调用 fn 时都会在调用 setInterval 时重新定义。 function abortAjax() 应该是 abortAjax()

【讨论】:

    【解决方案2】:

    我修改如下,它可以工作

            abortValue = false;
            var xhr;
            xhrPool = [];
            var trying;
    
            function abortAjax() {
                $.each(xhrPool, function(idx, jqXHR) {
                    jqXHR.abort();
    
                });
    
            }
            $(document).ready(function() {
                fn = function() {
                    xhr = $.ajax({
                        url: '/getUrl',
                        beforeSend: function(jqXHR) {
                            xhrPool.push(jqXHR);
                        },
                        complete: function(jqXHR, data) {
                            if (abortValue == true) {
                                abortAjax()
                            } else {
                                if (jqXHR.statusText != "error" && "undefined") {
                                    //myactions
    
                                }
    
                            }
                        }
                    });
    
                };
    
                var interval = setInterval(fn, 5000);
            });
    
    
            function updateData_function {
                //I want to abort all previous ajax calls and make a new ajax call since it will update the data
    
                abortValue = true;
                abortAjax();
                abortValue = false;
                fn();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-15
      • 2018-03-20
      • 2018-05-28
      • 1970-01-01
      相关资源
      最近更新 更多