多个Ajax调用 - 将值从一个传递到下一个

时间:2016-08-12 22:50:39

标签: jquery ajax asynchronous promise

我需要进行多次AJAX调用,每次调用都会返回下一个需要的值。我知道AJAX不是这样的,因为它是异步的。

我已经阅读过Callbacks,Promises,Async Utility以及在AJAX调用中使用Success,但不知道该怎么做。

基本上,我必须对数据库进行大约8次不同的调用,并使用JQuery / AJAX进行调用。

实现这一目标的最佳/正确方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是将每个调用放在唯一函数中,并在成功回调中调用每个函数。承诺可能更优雅,但有点难以理解。所以像这样:

call1(1);

function call1(valueNeeded){
    $.get(url,function(data){
        call2(data);
    });
}
function call2(valueNeeded){
    $.get(url,function(data){
        call3(data);
    });
}
function call3(valueNeeded){
    $.get(url,function(data){
        //Finished
    });
}

我不认为这是“最好”的方法,但它很简单。调用你的函数,当ajax完成时,你从成功回调中激活下一个函数。当调用成功时,将调用成功回调。

答案 1 :(得分:1)

如果您要发送两个或多个必须全部完成的请求才能继续,那么您可以使用$.when方法。在运行.done回调之前,它将等待所有请求完成。

$.when(
    $.get("/user/123"),
    $.get("/user/123/profile")
) .done(function (user, profile) {
    console.log("Hello " + user.name + " (" + profile.email + ")");
});

如果请求取决于先前的请求,那么您可以使用.then方法:

$.get("/user/123").then(function (user) {
    var deferred = $.Deferred();
    $.get("/profile/" + user.profile_id).done(function (profile) {
        deferred.resolve(user, profile);
    });
    return deferred;
}).done(function (user, profile) {
    console.log("Hello " + user.name + " (" + profile.email + ")");
});