我有三个ajax调用。第二个应该从第一个的结果接收参数,第三个应该从第二个接收参数。如:
var getYears = function getYears() {return $.ajax({....});};
var getMonths = function(year) {return $.ajax({...});};
var getDays = function(month, year) {return $.ajax({...})};
我很遗憾如何将这些链接成$.when()
。
到目前为止,我所做的工作正常,但我更喜欢$.when()
方式,因为我将在稍后的代码中引用结果。
function init() {
var y, m, d;
getYears().then(function (years) {
var year = years.d[0];
y = years.d;
getMonths(year).then(function (months) {
var month = months.d[0].MonthNo;
m = months.d;
getDays(month, year).then(function (days) {
d = days.d;
}).done(function () {
return initialize = { years: y, months: m, days: d };
});
});
});
};
当我使用时:
$.when(
getYears(),
getMonths(//here i need to refer the result of getYears),
getDays(//here needs the result of getMonths).done(function()
{// do something else})
);
答案 0 :(得分:0)
$.when()
接受以逗号分隔的promises(数组不起作用)然后,一旦所有这些promise都已解决,它将按照then
指定的顺序将它们传递给$.when()
函数。你不必担心哪个回叫会先完成。
例如:
$.when(getyears,getmoths,getdays).then(function(year,month, day){
console.log("today is: " + year + month + day);
});
当你需要在你的ajax调用上使用$.deferred()
时,为了获得那些承诺,所以他们会返回一个承诺。
答案 1 :(得分:0)
你想做这样的事吗? http://jsfiddle.net/Chubyone/NtQKs/
init().done(function(day, month, year){ /*stuff */ });
特别是?