2011-03-03 104 views
3

我想創建一個腳本,即使在失敗時仍然運行,直到返回某個單詞。底部函數將運行約30秒,由於PHP腳本(這是我想要的)停止,然後jquery將觸發它一次又一次運行(直到返回某個觸發器)。頂層函數get_data();將在其本身完成請求後每秒運行一次(它基本上找出在另一個請求處於什麼階段)。如何殺死阿賈克斯請求

我的問題是保持事情整潔,當請求再次激活時,它會啓動get_data()函數再次這是不需要的,除非在這種情況下發生錯誤,爲了克服這個問題,我只想終止所有的ajax請求並重新開始(get data函數只運行一個小的php腳本,半秒鐘處理,另一個大約10秒鐘,這樣做不會造成太大的傷害),但我似乎無法得到它終止ajax請求,我只是繼續有多個get_data()請求在各個方向開火.. 。

$(document).ready(function() { 
    var number = 0; 
    var requests = []; 

    function kill_requests(requests){ 
     $.each(requests, function(i, v){ 
      v.abort(); 
     }) 
    } 
    function get_data(url, requests){ 
     $('#requests').html(number); 
     requests.push($.ajax({ 
      type: 'POST', url: './scrape/ajaxGetData.php', data: 'url=' + encodeURIComponent(url), cache: false, timeout: 10000, 
      error : function(){ }, 
      success: function(html){ 
       if(html.substr(0,12) == '<!-- die -->') { 
        kill_requests(requests); 
        $("#result").html('<p>Complete...</p>' + html); 
       }else{ 
        $("#result").html(html); 
        window.setTimeout(function(){ number++; get_data(url, requests) }, 2000); 
       } 
      }       
     })); 
    } 
    $("input[name=submit]").live("click", function(){ 
     var url = $("input[name=url]").val(); 
     requests.push($.ajax({ 
      type: 'POST', url: './index.php', data: 'submit=true&url=' + encodeURIComponent(url), cache: false, 
      error : function(){ 
       kill_requests(requests); 
       $("input[name=submit]").trigger('click'); 
      }, 
      success: function(html){ 
       $("#result2").html(html); 
       if(html.substr(0,12) != '<!-- die -->') { 
        kill_requests(requests); 
        $("input[name=submit]").trigger('click'); 
       } 
      }       
     })); 
     get_data(url, requests); 
    }); 
}); 
+0

如果你使用普通的舊XHR當你開始使用XHR對象將中止當前的(如果有的話)的同一個實例的新請求。 – NullUserException 2011-03-03 06:47:35

+0

感謝您的輸入。任何想法如何與上面的jquery做到這一點? – 2011-03-03 06:52:02

+0

對,看來中止不是我的問題。我用'get_data(url,requests)'設置了大量的路徑/方向/線程;'所以我只是在運行一次後,不要在觸發事件時再次運行它。 – 2011-03-03 10:21:57

回答