Javascript 中止jquery中以前的所有请求

Javascript 中止jquery中以前的所有请求,javascript,jquery,ajax,Javascript,Jquery,Ajax,我的应用程序中有一个搜索框。在其中,当用户在搜索框中键入单词时,我必须显示结果。为此,我需要中止所有以前的请求,并在网格中显示最后一个请求的结果 因为我使用的是网格,所以网格“beforeSend”事件将覆盖jquery beforeSend事件。所以我用下面的代码 <script type="text/javascript"> $(function () { $.xhrPool = []; grid.Adaptor.prototype.beforeSend = fu

我的应用程序中有一个搜索框。在其中,当用户在搜索框中键入单词时,我必须显示结果。为此,我需要中止所有以前的请求,并在网格中显示最后一个请求的结果

因为我使用的是网格,所以网格“beforeSend”事件将覆盖jquery beforeSend事件。所以我用下面的代码

<script type="text/javascript">
$(function () {
    $.xhrPool = [];
    grid.Adaptor.prototype.beforeSend = function (jqXHR) {
        $.xhrPool.push(jqXHR);
    }
    $.xhrPool.abortAll = function () {
        $(this).each(function (i, jqXHR) { 
            jqXHR.abort();  
            $.xhrPool.splice(i, 1);
        });
    }
    $.ajaxSetup({
        complete: function (jqXHR) {
            var i = $.xhrPool.indexOf(jqXHR); 
            if (i > -1) $.xhrPool.splice(i, 1); 
        }
    });
})

$(函数(){
$.xhrPool=[];
grid.adapter.prototype.beforeSend=函数(jqXHR){
$.xhrPool.push(jqXHR);
}
$.xhrPool.abortAll=函数(){
$(this).each(函数(i,jqXHR){
jqXHR.abort();
$.xhrPool.splice(i,1);
});
}
$.ajaxSetup({
完成:函数(jqXHR){
变量i=$.xhrPool.indexOf(jqXHR);
如果(i>-1)$.xhrPool.splice(i,1);
}
});
})

但是,我可以在XHRPOL中推送请求,但不能中止以前的请求

注意,
$.xhrPool.abortAll=function(){
当我放置断点时,这不会命中

我错过了什么

我必须在用户在搜索框中键入单词时显示结果。为此,我需要中止所有以前的请求,并在网格中显示上次请求的结果

您的代码:

$.ajaxSetup({
    complete: function (jqXHR) {
        var i = $.xhrPool.indexOf(jqXHR); 
        if (i > -1) $.xhrPool.splice(i, 1); 
    }
});
不会执行任何操作,因为此
完成
回调仅在请求获得响应为
成功
错误
时触发。因此,在此处中止没有意义

我建议您将timed
setTimeout()
clearTimeout()
结合使用:

$(函数(){
var时间;
$(‘输入’).keydown(函数(e){
如果(时间){
//在使用ajax之前
//如果存在/存在超时,请清除超时
clearTimeout(时间);
} 
time=setTimeout(函数(){
//这里是ajax代码。
},600);
});
})

您正在向数组对象添加一个方法。是什么让您认为JavaScript解释器会调用该方法本身?请尝试一下,调用
$.xhrPool.abortAll
的代码在哪里?您确定
abortAll()中的
$(this)
返回您的
xhrPool
?我想说,您为什么不设置一个超时来延迟发送请求。当我添加setTimeOut函数时,这是有效的。我需要确认我不能在ajaxSetup中中止以前的ajax请求?您可以在
beforeSend:callback
中这样做。好吧,jai。我正在使用网格,所以,ajaxSetup是前置对我不起作用。谢谢你的解决方案。:)