jQuery mobile 中包含 ajax 时的函数执行顺序
Posted
技术标签:
【中文标题】jQuery mobile 中包含 ajax 时的函数执行顺序【英文标题】:Function Execution order when ajax included in jQuery mobile 【发布时间】:2013-02-16 04:30:48 【问题描述】:我对 jQuery 中具有 ajax 调用的函数的执行方式有疑问。
考虑两个函数。
function auth()
$.ajax(
type: "POST",
dataType: "json",
url: API_URL,
data: ....
,
success: function (response)
);
;
function getData()
$.ajax(
type: "POST",
dataType: "json",
url: API_URL,
data: ....
,
success: function (response)
);
;
我一个接一个地调用这些函数,如下所示...
auth();
getData();
我的情况是,我只想在完成 'auth()' 之后执行getData()
。我知道我们可以在auth的成功函数中调用getData()
。但我想知道的是,如果我一个接一个地调用这些函数将如何执行,如上所示。
任何形式的帮助将不胜感激 :) 谢谢。
【问题讨论】:
【参考方案1】:您可以在 jQuery 中使用deferred objects。只需返回 ajax()
结果即可。
function auth()
return $.ajax(
type: "POST",
dataType : "json",
url: API_URL,
data: .... ,
success: function (response)
);
;
auth.done(getData);
当auth
完成时,这将调用getData
。
【讨论】:
感谢您的回复 :),我认为这会解决的。除此之外,如果我一个接一个地调用这些功能将如何执行? IE;第二个函数会等待第一个函数的 ajax 请求被强制执行吗? 第二个函数只有在第一个ajax请求成功的情况下才会执行。【参考方案2】:它们将异步执行。如果这是您想要的,您可以通过在调用中设置 "async=false" 让它们等待(同步)。
function auth()
$.ajax(
**async: false,**
type: "POST",
dataType: "json",
url: API_URL,
data: ....
,
success: function (response)
);
;
function getData()
$.ajax(
**aysnc: false,**
type: "POST",
dataType: "json",
url: API_URL,
data: ....
,
success: function (response)
);
;
这将使通话在继续下一个通话之前完成,但通常会在通话时锁定浏览器:
异步(默认:true) 类型:Boolean 默认情况下,所有请求都是异步发送的(即默认设置为 true)。如果您需要同步请求,请将此选项设置为 false。跨域请求和 dataType: "jsonp" 请求不支持同步操作。 请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。 从 jQuery 1.8 开始,不推荐使用 async: false 和 jqXHR ($.Deferred)。您必须使用成功/错误/完成回调选项,而不是 jqXHR 对象的相应方法,例如 jqXHR.done() 或已弃用的 jqXHR.success()。
Src JQM 站点:http://api.jquery.com/jQuery.ajax/
【讨论】:
感谢您的帮助,感谢您为起草如此详细的回复所做的努力。它帮助了我。 :)以上是关于jQuery mobile 中包含 ajax 时的函数执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
使用 Browserify 在 Node JS 项目中包含 JQuery Mobile