然后使用jquery检查是否加载了所有ajax数据。

然后使用jquery检查是否加载了所有ajax数据。,jquery,Jquery,我正在使用ajax从XML层次结构加载数据。首先加载父文件,然后遍历所有节点并为每个节点加载另一个XML文件。我想将所有这些XML加载的结果放入一个java对象中,然后做一些事情 代码如下: $(document).ready(function(){ $.when(getXmlFile('ansatt',request('meglerid'),writeEmployee)).done(); }); var items; function writeEmployee(data){

我正在使用ajax从XML层次结构加载数据。首先加载父文件,然后遍历所有节点并为每个节点加载另一个XML文件。我想将所有这些XML加载的结果放入一个java对象中,然后做一些事情

代码如下:

$(document).ready(function(){
    $.when(getXmlFile('ansatt',request('meglerid'),writeEmployee)).done();
}); 

var items;

function writeEmployee(data){
    var def = [];
    _.each(data.children[0].children,function(item,key,list){
        //Get more data about each property
        var propid = findField(item,'oppdragsnummer');
        def.push(getXmlFile('oppdrag',propid,writeProperty));
    });
    $.when(def).done(function(){console.log('loaded ' + items.length)});
}

function writeProperty(data){
    items.push(data);
}

function getXmlFile (type,id, func){
    return $.ajax({
        type: "GET",
        contentType: "application/xml",
        url: "http://privatmeglerdrammen.no.er3.itum.com/site/privatmeglerdrammen.no/design/renderings/xml/" + type + id + ".xml",
        dataType: "xml"
        }).done(function (data){
            func(data);
        });
}
当所有这些都完成后,items数组包含119个元素,但是console.log('loaded..)行输出0个元素

我做错了什么

在完成所有ajax调用后,可以使用ajaxStop()运行函数:

如果你看一下这条线(我的):

如果将单个参数传递给
jQuery.when()
,并且该参数不是延迟参数或承诺参数,则该参数将被视为已解决的延迟参数,任何附加的doneCallbacks都将立即执行

您正在传递一个jqXHR对象数组。如果您一次通过一个,您将获得预期的日志记录

例如,使用:


从文档中看,它不像数组应该是
$的参数。当
不确定如何做时,你能给出一个使用我的代码的示例吗?我有其他ajax调用与这些调用并行工作。ajaxStop不会强迫我等待所有ajax调用完成吗?
$(document).ajaxStop(function() {
    DoSomething();
});
$.when.apply($, def).done(function() {/* insert logging */});