在发出新请求时停止上一个ajax

时间:2013-10-28 12:00:32

标签: php jquery ajax

我有一个脚本

$('#postinput').on('keyup',function(){ 
    var txt=$(this).val();

    $.ajax({
       type: "POST",
       url: "action.php",
       data: 'txt='+txt,
       cache: false,
       context:this,
       success: function(html)
       {
           alert(html);
       }

   });

});

假设有人输入a,ajax运行。他马上输入了b c等等。 Ajax每次运行。有没有办法在新的时候停止先前的请求?

2 个答案:

答案 0 :(得分:1)

您可以使用abort()的{​​{1}}方法。试试这个:

xhr

如果您不想使用全局变量,可以将var currentXhr; $('#postinput').on('keyup',function(){ currentXhr && currentXhr.readyState != 4 && currentXhr.abort(); // clear previous request var txt = $(this).val(); var currentXhr = $.ajax({ type: "POST", url: "action.php", data: 'txt=' + txt, cache: false, context:this, success: function(html) { alert(html); } }); }); 存储在xhr元素的data-*属性中。

另一种方法是仅在用户停止输入时触发AJAX请求:

#postinput

答案 1 :(得分:0)

您可以使用Jquery -

执行此操作
jaxRequests = new Array();

queueRequest = function(whatever, you, want) {
    if(ajaxRequests[ajaxRequests.length - 1]) {
        ajaxRequests[ajaxRequests.length - 1].abort();
    }

    ajaxRequests[ajaxRequests.length] = //Insert New jQuery AJAX call here.
}