繁体   English   中英

如何杀死ajax请求

[英]how to kill ajax requests

我正在尝试创建一个脚本,以便在失败之前保持运行,直到返回某个单词。 底部函数将运行大约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 );
    });
});

在这里查看AJAX Manager插件:

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

和这里:

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

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

你试过jquery abort()函数吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM