0

我对在 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();

我的情况是,我只想getData()在完成 'auth()' 之后执行。我知道我们可以调用getData()内部的 auth 成功函数。但我想知道的是,如果我一个接一个地调用这些函数将如何执行,如上所示。

任何形式的帮助将不胜感激:) 谢谢。

4

2 回答 2

1

您可以在 jQuery中使用延迟对象。只需返回ajax()结果。

function auth() {
  return $.ajax({
        type: "POST",
        dataType : "json",
        url: API_URL,
        data: { ....  },
        success: function (response) {
        }
  });             
};

auth.done(getData);

这将getDataauth完成时调用。

于 2013-02-16T04:37:21.080 回答
0

它们将异步执行。如果这是您想要的,您可以通过在调用中设置“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) {}
    });
};

这将使呼叫在继续下一个呼叫之前完成,但通常会在拨打电话时锁定浏览器:

async (默认:true) 类型:Boolean 默认情况下,所有请求都是异步发送的(即默认设置为true)。如果您需要同步请求,请将此选项设置为 false。跨域请求和 dataType: "jsonp" 请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。从 jQuery 1.8 开始,不推荐在 jqXHR ($.Deferred) 中使用 async: false ;您必须使用成功/错误/完成回调选项而不是 jqXHR 对象的相应方法,例如 jqXHR.done() 或已弃用的 jqXHR.success()。

Src JQM 站点:http ://api.jquery.com/jQuery.ajax/

于 2013-02-16T06:03:10.553 回答