2017-10-07 3 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

を働き、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

xhrPool = []fnの外に定義します。 setIntervalが呼び出されると、fnへの呼び出しごとにxhrPoolが再定義されます。 function abortAjax()abortAjax()である必要があります。

0

が、私は以下のように変更され、それはjQueryの3のとおり

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