我最近注意到我的代碼的下面的行爲。帶有ajax的JavaScript函數不會一個接一個執行?
function abc(){
a();
b();
c();
}
function a(){
// ajax call
$("#number").val("a");
// ajax call finished
}
function b(){
// ajax call
$("#number").val("b");
// ajax call finished
}
function c(){
alert($("#number").val());
// ajax call
$("#number").val("c");
// ajax call finished
}
HTML代碼
<input id="number" value="" type="hidden"/>
<button type="submit" id="mySubmit" onClick="abc()">Search</button>
我想,當我打電話功能abc()
然後第一a()
會執行,然後b()
,然後c()
但在我看來,alert
在c()
是之前執行b()
完成,因爲它顯示a
作爲警報框結果。
但如果代碼是像下面如期工作,(警告顯示b
)
function abc(){
a();
b();
c();
}
function a(){
$("#number").val("a");
}
function b(){
$("#number").val("b");
}
function c(){
alert($("#number").val());
$("#number").val("c");
}
這究竟是爲什麼?第一個代碼中的那些ajax調用與此有關?
注意:對不起,我無法在小提琴中重新創建此問題。有這種經驗並且知道原因的人可以幫助我解決這個問題。我也發佈了this SO question。這些答案與此行爲相矛盾。
ajax:「執行**異步** HTTP(Ajax)請求。」 – Tomanow 2015-02-09 20:03:19
http://blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks 2015-02-09 20:03:47
@Tomanow:請你能詳細說明你的答案。 – prime 2015-02-09 20:04:37