是否可以在jqxhr.done函数中运行Ajax函数?

时间:2015-07-11 20:58:21

标签: jquery json promise

var json = $.getJSON("sun.json", function(json1) {
    $.each(json1, function(key, data) {
        //Json Code
    });
});
json.done(function() {
    $.getJSON("sun2.json", function(json1) {
        $.each(json1, function(key, data) {
            //More json Code
        });
    });
});

可以这样做吗?我想用第一个json文件生成一些东西,然后当它完成时,用第二个json文件做更多的东西。我不明白为什么它不起作用,但我想我在这里得到一些澄清以防万一。

1 个答案:

答案 0 :(得分:3)

是的,您可以在$.getJSON功能中执行.done

也就是说,链接$.getJSON电话的好方法(感谢jquery promise interface)将是使用then函数,可能看起来像这样...

$.getJSON("sun.json", function(json) {
    $.each(json, function(key, data) {
        //do something
    });
})
.then(function() {
    return $.getJSON("sun2.json", function(json) {
        $.each(json, function(key, data) {
            //do something with sun2.json
        });
    });
})
.then(function() {
    return $.getJSON("sun3.json", function(json) {
        $.each(json, function(key, data) {
            //so something with sun3.json
        });
    });
});

链接这样的延迟承诺会阻止"callback pyramid of doom"允许更平坦,更易读的代码结构。

附录 感谢@BenjaminGruenbaum清除我早先的困惑!