我正在使用jQuery來做一些AJAX調用,並想知道人們如何處理這種情況。多個AJAX調用處理
- 向服務器發出ajax請求以檢索某些信息。
- 在請求返回之前,發出另一個請求。第一個請求現在無效並且已過時。
如何判斷初始請求現在無效,並在返回時可以忽略。我只想顯示第二個請求的結果並忽略(或取消)第一個請求。
我正在使用jQuery來做一些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