2011-03-03 103 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

回答