多个AJAX调用处理
问题描述:
我正在使用jQuery来做一些AJAX调用,并想知道人们如何处理这种情况。多个AJAX调用处理
- 向服务器发出ajax请求以检索某些信息。
- 在请求返回之前,发出另一个请求。第一个请求现在无效并且已过时。
如何判断初始请求现在无效,并在返回时可以忽略。我只想显示第二个请求的结果并忽略(或取消)第一个请求。
答
的jQuery从呼叫ajax()
,我已经用来实现你的愿望如下返回XmlHttpRequest
对象被制成。
答
我以前从未遇到过这种情况,但是您可以发送一个密钥,您在发出请求时递增,并将密钥发送回响应。当响应到达时,您可以检查密钥以查看它是否符合您的预期。
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
答
保留标识请求的变量(例如:“request_id”)的记录。在每个新请求中向变量添加1。只有在服务器返回的request_id等于您在客户端上拥有的变量时才处理该请求。
var lastRequest;
function getSomeData() {
if(lastRequest) {
lastRequest.abort();
lastRequest = null
}
lastRequest = $.ajax(...);
}
的净效应是,早些时候提出的回应是,如果后续请求忽略:
答
我不希望涉及服务调用,您可能无法始终控制服务定义。我想看到类似这样的东西
$(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
}
}
});
});
});
我喜欢这种方法,但是如果您无法控制服务定义呢? – bendewey 2009-02-07 02:46:47