我最近注意到我的代码的下面的行为。带有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