我想從JQuery Ajax發送數據到一個通用處理程序,它可以計算出某些東西並返回結果。 Ajax請求在JQuery結尾的for
循環內進行。該代碼看起來是這樣的:JQuery Ajax如何工作?
function send(Handler, ids) {
var URL = "http://" + window.location.host + "/Handlers/" + Handler + ".ashx";
var i;
for (i = 0; i < 10; i++) {
var cur = $('.' + ids[i]);
$.ajax({
url: URL,
type: "POST",
data: JSON.stringify({
Data: cur
}),
dataType: "json",
cache: false,
beforeSend: //my before send code,
success: //my success code,
error: //my error code
});
}
alert('Done!');
}
我把3斷點在Visual Studio 2012在行:
$.ajax({
在通用處理器在第一線這個
alert('Done!');
;第三斷點。
現在,當我嘗試執行這段代碼,阿賈克斯很好地工作在異步方式。但是,當它到達第一個斷點時,停在那裏然後我繼續它,而不是到達通用處理程序的斷點,它繼續循環並返回到第一個斷點。然後,在到達第二個斷點後,它會一次又一次地停止在通用處理程序的中斷點處爲每個值。
那麼,這是否意味着阿賈克斯首先收集所有的Ajax請求,然後for
循環之後一起執行呢?
號,請求並立即進行通話開始阿賈克斯'$()',但循環繼續開始下一個請求或'警報(「完成!」)'之前沒有完成。處理程序('success'等)被設置爲在接收到響應時被調用,這在「他們自己的時間」(異步地)發生,未被循環或彼此解綁。 –
如果服務器代碼也在您的控制之下,那麼擁有一個返回多個結果的Web服務(例如,一個ID數組)會比您所做的更有效率。作爲副作用,如果切換到該模式,您將避免此問題。 –