[英]Multiple ajax call handling
我正在使用jQuery进行一些ajax调用,并想知道人们如何处理这种情况。
如何判断初始请求现在无效,返回时可以忽略。 我只想显示第二个请求的结果并忽略(或取消)第一个请求。
jQuery从调用ajax()
返回XmlHttpRequest
对象,我用它来实现你想要的,如下所示:
var lastRequest;
function getSomeData() {
if(lastRequest) {
lastRequest.abort();
lastRequest = null
}
lastRequest = $.ajax(...);
}
实际效果是,如果发出后续请求,则会忽略先前请求的响应。
保留标识请求的变量(例如:“request_id”)的记录。 在每个新请求中为变量添加1。 仅当服务器返回的request_id等于客户端上的变量时才处理请求。
我之前从未遇到过这种情况,但您可以发送一个在发出请求时递增的密钥,并将密钥与响应一起发回。 当响应到达时,您可以检查密钥以查看它是否符合您的预期。
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'
);
});
});
“我如何判断初始请求现在无效”
你不...... 您在客户端层排队Ajax请求,并且在先前的返回并完成对DOM的操作之前不要让它们激活...
您可以在我的博客上获取有关如何执行此操作的一些详细信息:“如何创建Ajax库”; http://ra-ajax.org/how-to-create-an-ajax-library-part-7-the-ra-ajax-class.blog
我不想涉及服务电话,您可能无法始终控制服务定义。 我想看到这样的事情
$(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
}
}
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.