为什么.done()方法在$ getJSON调用完成执行之前完成执行?

时间:2015-02-12 03:27:18

标签: javascript jquery html ajax json

在我的getJSON调用执行完毕之前,我遇到了一个问题,其中一个方法正在执行。此方法在执行之前需要来自调用的数据。

我查了一些诸如"延迟调用或.done()之类的内容,但我的主要问题是我的嵌套getJSON调用是可变的。这意味着从我的第一个文件中我得到一个数字并使用该数字创建一个循环,然后根据该数字执行多个getJSON调用。我无法附加.done()因为我必须多次执行,并且延迟调用不会因为同样的原因而工作。出于某种原因,第一个.done()不会等到内部getJSON调用在执行之前完成...这应该发生吗?

       $.getJSON(file, function(d) 
    {

       for(var i = 0; i < d.name.length; i++)
       {
            files[i] = d.name[i];



                fileName = "/"+files[i];

           $.getJSON(fileName+'.PNG', function(data)
           {


                json[i] = data;
           });
       }
    })

   .done(function()
   {
    makeUL(plan); //doesn't work but needs the data from json[i] in order to continue.
    })

    .fail(function( jqxhr, textStatus, error )
    {
        var err = textStatus + ', ' + error;
        console.log( "Request Failed: " + err);
        alert("failed");
   });

任何人都知道我该怎么做?

全部谢谢:)

1 个答案:

答案 0 :(得分:1)

您可以尝试使用可用于完成所有承诺的$.when()

$.getJSON(file, function (d) {
    var requests = $.map(d.name, function (value, i) {
        files[i] = value;
        var fileName = "/" + value;
        return $.getJSON(fileName + '.PEV', function (data) {
            json[i] = data;
        });
    });

    $.when.apply($, requests).done(function () {
        makeUL(plan);
    });
}).fail(function (jqxhr, textStatus, error) {
    var err = textStatus + ', ' + error;
    console.log("Request Failed: " + err);
    alert("failed");
});