2017-10-07 75 views
0

这是我的功能如何使用jquery中止所有挂起的ajax请求的列表?

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电话,请帮助我!提前感谢!

+0

在jQuery 3,ajax的方法返回一个承诺没有额外的方法(比如中止),因此这将不再工作。查看3.0博客http://blog.jquery.com/2016/01/14/jquery-3-0-beta-released/ – BlackBurn027

+0

@RamyaS查看https://stackoverflow.com/help/someone-answers – guest271314

回答

2

Define xhrPool = []fn功能之外。当调用setInterval时,每次调用fn时重新定义xhrPoolfunction abortAjax()应该是abortAjax()

0

我修改类似下面,它的工作原理

 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(); 
    }