我正在通过$.get
方法加载一些数据。我在get
调用中使用了成功函数。但我也使用when
/ then
构造。
是否会调用这两个回调,如果是,那么首先发生哪些回调?为什么?
$.when(
$.get("test.html", functionA )
).then( functionB );
如果成功,是否可以保证拨打functionA
,然后functionB
?或者是否存在B可能在A之前发生的情况,或者functionA
中的某些内容是否会阻止functionB
被调用?我无法在jQuery文档中找到答案。
答案 0 :(得分:3)
摘要:functionA
将在您的示例中提前调用functionB
。来自success
设置的error
和jQuery.ajax
回调(或示例中传递给$.get
)将比之前回复jqxhr
的回调更早调用对象以后。那么,今天: - )
详细信息:jQuery.ajax()的文档未提及此问题。如果可以的话,你最好避免依赖它。
只要您使用特定的jQuery版本进行开发,就可以检查其实现并假设它不会更改。如果升级,则应检查假设是否仍然有效。
例如,jQuery(1.12.4,2.2.4和3.1.1)的所有受支持分支中的最新版本在jQuery.ajax设置之前注册success
和error
回调调用者获取jqxhr
对象并可以注册他们的回调。 jqxhr
对象是Deferred Object,它保证附加到其解析或拒绝的处理程序按其附加顺序执行。例如,您可以在deferred.done()的文档中进行确认。这意味着,来自jQuery.ajax设置的success
和error
回调将始终比之后附加到返回的jqxhr
对象的任何回调更早被调用。
// Install callbacks on deferreds
completeDeferred.add( s.complete );
jqXHR.done( s.success );
jqXHR.fail( s.error );
我承认,在未来的jQuery更新中,更改执行顺序的可能性相当小。这就是为什么我认为,取决于它会非常稳定。