如何在jQuery中使用$ .when()。then()内的If语句

时间:2018-03-28 09:38:50

标签: javascript jquery

我使用JavaScript控制器初始化一个获取参数的方法。取决于参数的值,我使用$ .when()和then()方法从ajax调用中获取数据。

具体来说,如果在$。内传递的参数是真的,那么我希望有4个ajax调用,否则有3个。

$.when(
    $.ajax({
        url: "test.html"
    }).done(function () {
        $(this).addClass("done");
    }),
    $.ajax({
        url: "test2.html"
    }).done(function () {
        $(this).addClass("done");
    }),
    $.ajax({
        url: "test3.html"
    }).done(function () {
        $(this).addClass("done");
    }),
    if (config,EditMode) {
        $.ajax({
            url: "test3.html"
        }).done(function () {
            $(this).addClass("done");
        })
    }
).then(function () {
    if (config,EditMode)
        somemethod();
    else
        someOtherMethod();
}).done(function () {
    //code
});

我尝试了类似上面的内容,但我不能真正使语法工作。 当然,我可以创建一个全局if else,只是复制代码。 但我会从DRY原则中得到投诉:))。

你有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:4)

请勿在{{1​​}}的通话中直接将$.ajax来电作为参数。

更简单的方法是创建各个承诺的数组:

$.when()

然后使用var promises = []; promises.push($.ajax(...)); promises.push($.ajax(...)); promises.push($.ajax(...)); if (config.EditMode) { promises.push($.ajax(...)); } 传递列表:

.apply

当你事先不知道要传递多少参数时,这是调用函数的常用方法。