如何杀死ajax请求

时间:2011-03-03 05:44:56

标签: php ajax

我正在尝试创建一个脚本以便在失败时继续运行,直到返回某个单词。底部函数将运行大约30秒,由于PHP脚本(这是我想要的)停止,然后jquery将触发它一次又一次地运行(直到返回某个触发器)。 top函数get_data();在完成请求后,它将每隔一秒半运行一次(它基本上会发现另一个请求处于什么阶段。

我的问题是保持整洁,当再次激活请求时,它再次启动get_data()功能,除非发生错误,否则不需要它。为了解决这个问题,我只想终止所有ajax请求并重新启动(获取数据函数只运行一个小的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 );
    });
});

2 个答案:

答案 0 :(得分:1)

在这里查看AJAX Manager插件:

http://plugins.jquery.com/project/AjaxManager

在这里:

http://www.protofunc.com/scripts/jquery/ajaxManager/

它允许您缓存请求,防止对同一URL的双重请求以及中止请求以及其他功能。

答案 1 :(得分:1)

您是否尝试过jquery abort()函数?

引用“在对象上调用.abort()将在请求完成之前暂停该请求。”

http://api.jquery.com/jQuery.ajax/