我正在使用jQuery进行一些ajax调用,并想知道人们如何处理这种情况。
如何判断初始请求现在无效,返回时可以忽略。我只想显示第二个请求的结果并忽略(或取消)第一个请求。
答案 0 :(得分:13)
jQuery从XmlHttpRequest
的调用返回ajax()
对象,我已经用它来实现你想要的,如下所示:
var lastRequest;
function getSomeData() {
if(lastRequest) {
lastRequest.abort();
lastRequest = null
}
lastRequest = $.ajax(...);
}
净效应是,如果发出后续请求,则会忽略先前请求的响应。
答案 1 :(得分:2)
记录标识请求的变量(例如:“request_id”)。在每个新请求中为变量添加1。仅当服务器返回的request_id等于客户端上的变量时才处理请求。
答案 2 :(得分:0)
我之前从未遇到过这种情况,但您可以发送一个在发出请求时递增的密钥,并将密钥与响应一起发回。当响应到达时,您可以检查密钥以查看它是否符合您的预期。
var incrementor = 1;
var lastSent = 0;
jQuery(document).ready(function() {
jQuery('a.submitter').click(function(event) {
event.preventDefault();
lastSent = incrementor;
incrementor++;
jQuery.post(
'some-url.php',
{
'request-id': lastSent,
'other-data': 'some-data'
},
function( data, textStatus ) {
if( data.requestId == lastSent ) {
// Do stuff
}
},
'json'
);
});
});
答案 3 :(得分:0)
“我如何判断初始请求现在无效”
你不...... 您在客户端层排队Ajax请求,并且在之前的和完成对DOM的操作之前不要让它们激活...
您可以在我的博客上获取有关如何执行此操作的详细信息,其中包含“如何创建Ajax库”; http://ra-ajax.org/how-to-create-an-ajax-library-part-7-the-ra-ajax-class.blog
答案 4 :(得分:-1)
我不想涉及服务电话,您可能无法始终控制服务定义。我希望看到像这样的东西
$(function() {
$('.ajaxButton').click(function() {
$.currentCallId = (new Date()).getTime();
$.ajax({
type: "get",
url: 'http://www.google.com/',
beforeSend: function(xhr) {
this.callId = $.currentCallId;
},
success: function(data) {
if (this.callId === $.currentCallId) {
// process it
} else {
// throw it out
}
}
});
});
});