做一个Ajax调用的总和

时间:2014-02-14 13:10:15

标签: jquery

我有3个函数,每个函数执行ajax调用,并且必须一个接一个地调用。 func B()访问A()和C()访问值B()的访问值。 http://jsfiddle.net/NYPy6/

我已将这些功能链接起来:

A().then(B).then(C);

如何添加另一个函数D(),它使用延迟来总结所有三个函数的结果。

编辑:我的问题是在D()中写什么,以便我可以访问A + B + C的值。如小提琴所示,它是一个json文件,所以我需要访问json内容为 resA.data ,resB.data等,最后在D()中添加resA.data + resB.data。 json文件只包含一行数据:1,依此类推。

2 个答案:

答案 0 :(得分:1)

以下是如何将一堆函数链接在一起(按顺序)。你的D()函数不需要做总和;你可以随时随地建立总和。通过使用then(),传递给下一个函数的参数是链中前一个函数的结果:

function A() {
    return {
        data: 1
    };
}

function B(a) {
    return {
        data: a.data + 2
    };
}

function C(b) {
    return {
        data: b.data + 3
    };
}

function D(final) {
    alert('The sum is ' + final.data);
}

var sum = $.Deferred();
sum.then(A).then(B).then(C).done(D);
sum.resolve(); // Alerts "The sum is 6"

如果您需要将参数传递给A()以开始链,那也很容易。只需更改A()的定义:

function A(init) {
    return {
        data: init
    };
}

然后将值传递给resolve()方法:

sum.resolve(10); // Alerts "The sum is 15"

这个例子显然是做作的。您需要使用AJAX实现替换ABC,例如:

function A() {
    return $.ajax({ ... });
}

答案 1 :(得分:0)

您可以尝试:

A().then(B).then(C).done(D);