我试过通过this question和this,但我似乎无法弄清楚如何使我的需求工作。我想在循环中多次调用https://reqres.in/api/users。此AJAX调用仅返回虚拟用户的第一页。在收到第一页后,我想打电话给下一页。以特定顺序调用嵌套的AJAX调用
这里是我的代码:
$(document).ready(function() {
function getMoreUsers() {
var def = $.Deferred();
var requests = [];
for (var j=2; j<=4; j++) {
console.log("getting info for page # " + j);
requests.push(
$.ajax("https://reqres.in/api/users?page=" + j).done(function() {
console.log("got info for page # " + j);
def.resolve();
})
);
}
return def.promise();
}
function getAllUsers() {
var def = $.Deferred();
var requests = [];
for (var i=0; i< 2; i++) {
console.log("iteration # " + i);
requests.push(
$.ajax("https://reqres.in/api/users").done(function(data) {
console.log("got first page info");
getMoreUsers();
def.resolve();
})
);
}
return def.promise();
}
getAllUsers().done(function() {
console.log("all completed");
});
});
,我得到的输出是这样的:
iteration # 0
iteration # 1
got first page info
getting info for page # 2
getting info for page # 3
getting info for page # 4
all completed
got first page info
getting info for page # 2
getting info for page # 3
getting info for page # 4
got info for page # 5
不过,我想这样的:
iteration # 0
got first page info
getting info for page # 2
got info for page # 2
getting info for page # 3
got info for page # 3
getting info for page # 4
got info for page # 4
iteration # 1
got first page info
getting info for page # 2
got info for page # 2
getting info for page # 3
got info for page # 3
getting info for page # 4
got info for page # 4
all completed
我甚至不知道如何page # 5
当我循环到4时出现在输出中,它出现了6次,如下所示:
jQuery.Deferred()是你需要的 –
我已经使用过它,但不正确,我猜。 –
首先,您不需要创建新的延迟对象,解析并为每个AJAX请求返回它。 '$ .ajax'方法本身返回一个延迟对象:) – Terry