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