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

在Wordpress中包含jQuery

在WordPress主题中包含jQuery

在主题Wordpress中包含jquery

Jquery mobile collapsible在ajax get中不起作用

在 jQuery 序列化中包含占位符