Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax回调会以意外的顺序触发_Jquery - Fatal编程技术网

Jquery 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” 我不明白为什么会发生这种情况,也不知道如何修

psuedo代码: 当(x,y),然后(z)

其中y是对函数的调用,该函数进行ajax调用,如中所示:

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