Jquery Ajax回调会以意外的顺序触发
psuedo代码: 当(x,y),然后(z) 其中y是对函数的调用,该函数进行ajax调用,如中所示:Jquery Ajax回调会以意外的顺序触发,jquery,Jquery,psuedo代码: 当(x,y),然后(z) 其中y是对函数的调用,该函数进行ajax调用,如中所示: function y(......){ var p = $.ajax(...........); p.done(callMeFirst); return p; } 现在根据我的理解,既然x已经解决了,那么在成功的ajax调用中,“callMeFirst”应该首先触发,然后是“z” 但发生的是“z”先开火,然后“callMeFIrst” 我不明白为什么会发生这种情况,也不知道如何修
function y(......){
var p = $.ajax(...........);
p.done(callMeFirst);
return p;
}
现在根据我的理解,既然x已经解决了,那么在成功的ajax调用中,“callMeFirst”应该首先触发,然后是“z”
但发生的是“z”先开火,然后“callMeFIrst”
我不明白为什么会发生这种情况,也不知道如何修复它,因为我们所有的ajax调用都是通过“y”运行的,在任何其他回调处理它之前都需要它的调用后处理
短暂性脑缺血发作
Rob使用异步使其同步
return $.ajax({
url : url,
type : "POST",
cache: false,
async: false
}).responseText;
使用async使其同步
return $.ajax({
url : url,
type : "POST",
cache: false,
async: false
}).responseText;
这是因为ajax是异步的。解决方案是在p中调用z。我不知道ajax是异步的。。。这就是为什么我希望“callMeFirst”会在第一次注册时首先启动,然后“z”会在之后启动,因为它是第二次注册的。我不能把它放在p.done中,因为z依赖于x和y的完成,而callMeFirst只依赖于ajax调用的完成,“when”,“done”等都写得很好:你能再解释一下吗?你的伪代码在我的Chrome上运行得非常好-@Fabricio你的右边!我真正的代码更复杂,但在JSFIDLE上它起作用了,这使我更仔细地查看了自己的代码,并且在修复了它按预期工作时发现了一个愚蠢的错误。谢谢,这是因为ajax是异步的。解决方案是在p中调用z。我不知道ajax是异步的。。。这就是为什么我希望“callMeFirst”会在第一次注册时首先启动,然后“z”会在之后启动,因为它是第二次注册的。我不能把它放在p.done中,因为z依赖于x和y的完成,而callMeFirst只依赖于ajax调用的完成,“when”,“done”等都写得很好:你能再解释一下吗?你的伪代码在我的Chrome上运行得非常好-@Fabricio你的右边!我真正的代码更复杂,但在JSFIDLE上它起作用了,这使我更仔细地查看了自己的代码,并且在修复了它按预期工作时发现了一个愚蠢的错误。Thanks@moonwave99-同意,您不应该在ajax上设置async falsecalls@moonwave99-同意,决不应在ajax调用上设置async false