Javascript 中止jquery中以前的所有请求
我的应用程序中有一个搜索框。在其中,当用户在搜索框中键入单词时,我必须显示结果。为此,我需要中止所有以前的请求,并在网格中显示最后一个请求的结果 因为我使用的是网格,所以网格“beforeSend”事件将覆盖jquery beforeSend事件。所以我用下面的代码Javascript 中止jquery中以前的所有请求,javascript,jquery,ajax,Javascript,Jquery,Ajax,我的应用程序中有一个搜索框。在其中,当用户在搜索框中键入单词时,我必须显示结果。为此,我需要中止所有以前的请求,并在网格中显示最后一个请求的结果 因为我使用的是网格,所以网格“beforeSend”事件将覆盖jquery beforeSend事件。所以我用下面的代码 <script type="text/javascript"> $(function () { $.xhrPool = []; grid.Adaptor.prototype.beforeSend = fu
<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);
}
});
不会执行任何操作,因为此完成
回调仅在请求获得响应为成功
或错误
时触发。因此,在此处中止没有意义
我建议您将timedsetTimeout()
与clearTimeout()
结合使用:
$(函数(){
var时间;
$(‘输入’).keydown(函数(e){
如果(时间){
//在使用ajax之前
//如果存在/存在超时,请清除超时
clearTimeout(时间);
}
time=setTimeout(函数(){
//这里是ajax代码。
},600);
});
})
您正在向数组对象添加一个方法。是什么让您认为JavaScript解释器会调用该方法本身?请尝试一下,调用$.xhrPool.abortAll
的代码在哪里?您确定abortAll()中的$(this)
返回您的xhrPool
?我想说,您为什么不设置一个超时来延迟发送请求。当我添加setTimeOut函数时,这是有效的。我需要确认我不能在ajaxSetup中中止以前的ajax请求?您可以在beforeSend:callback
中这样做。好吧,jai。我正在使用网格,所以,ajaxSetup是前置对我不起作用。谢谢你的解决方案。:)