Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery中止AJAX请求的挂起/积压_Jquery_Ajax_Backlog - Fatal编程技术网

使用jQuery中止AJAX请求的挂起/积压

使用jQuery中止AJAX请求的挂起/积压,jquery,ajax,backlog,Jquery,Ajax,Backlog,我有以下脚本: $(document).ready(function(){ $('#input').keyup(function(){ sendValue($(this).val()); }); }); function sendValue(str){ $.post("ajax.php",{ sendValue: str }, function(data){ $('#display').html(data.retur

我有以下脚本:

  $(document).ready(function(){
    $('#input').keyup(function(){
        sendValue($(this).val());   

    }); 

});
function sendValue(str){
    $.post("ajax.php",{ sendValue: str },
    function(data){
        $('#display').html(data.returnValue);
    }, "json");

}
该脚本用于即时搜索类型场景(如Google),因此当用户在文本框中键入内容时,它会向服务器发送相当多的select请求(尽管我已经使用pconnect,因此没有重复的数据库连接)

它是一个相当大的数据库,每次击键都作为AJAX请求发送,因此它最终会积压大量未决请求。我希望它在每次发送新请求时停止/取消所有以前的请求(如果它们尚未被发送回)


我已经研究了
xhr.abort()
,但我非常确定这将停止所有尚未发送的请求(而不是告诉服务器停止处理)。这可能还可以,但我仍然不知道如何在代码中实现它

您可以使用类似于此的方法,以便将最后一个请求存储在某些非全局范围中:

function getSendValueFunction(){
    var lastRequest;

    return function(str){
        if (lastRequest){
            lastRequest.abort(); // abort pending request
        }
        // assign pending request, when created
        lastRequest = $.post("ajax.php",{ sendValue: str },
        function(data){
            lastRequest = null; // clear pending request
            $('#display').html(data.returnValue);
        }, "json");

    }
}

var sendValue = getSendValueFunction();
请记住,
getSendValueFunction
返回的函数具有上一个挂起请求的单独寄存器。因此,这将使他们有两个不同的未决请求,完全分开:

var sendValue1 = getSendValueFunction();
var sendValue2 = getSendValueFunction();
sendValue1('aaa');
sendValue2('bbb');