我需要进行多次AJAX调用,每次调用都会返回下一个需要的值。我知道AJAX不是这样的,因为它是异步的。
我已经阅读过Callbacks,Promises,Async Utility以及在AJAX调用中使用Success,但不知道该怎么做。
基本上,我必须对数据库进行大约8次不同的调用,并使用JQuery / AJAX进行调用。
实现这一目标的最佳/正确方法是什么?
答案 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 + ")");
});