jQuery$。然后使用前面函数中的参数

jQuery$。然后使用前面函数中的参数,jquery,Jquery,我有三个ajax电话。第二个应接收来自第一个结果的参数,第三个应接收来自第二个结果的参数。例如: var getYears = function getYears() {return $.ajax({....});}; var getMonths = function(year) {return $.ajax({...});}; var getDays = function(month, year) {return $.ajax({...})}; 我完全不知道如何将这些链接成$.when()

我有三个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})
);
$。当()
接受由逗号分隔的承诺(数组不起作用)时,一旦所有这些承诺都已解决,它就会按照
$指定的顺序将它们传递给
函数。当()
时。这样,您就不必担心哪个回调首先完成

例如:

$.when(getyears,getmoths,getdays).then(function(year,month, day){
    console.log("today is: " + year + month + day);
});

为了在需要对ajax调用使用
$.deferred()
时传递这些承诺,以便它们返回承诺。

您想这样做吗?


init().done(函数(日、月、年){/*stuff*/})特别是?

类似于?(作为评论发布,因为我不确定这是否是您想要做的)。在jq 1.8+中,您可以将
then
,类似于:
getYears()。然后(函数(years){return getMonths(years.d[0])。然后(…)
现在我想知道,如何将
year
值传递到getDays()?!我知道,我发现的大多数示例都不需要以前的函数结果作为参数。@Emin您是否检查了我上面发布的示例?另一个是真正的ajax调用。@Yoshi,感谢您抽出时间准备这个示例,但是,我目前在$上使用了类似的功能。然后$然后确保一个函数在到达另一个函数之前完成。。但是,我的问题是如何使用$。当所有函数都成功完成时,我运行另一个函数?getMonths()需要年份作为参数,来自getyears()@A.Wolff ahh-got-ya。我觉得比这更复杂