在下面的代码中,我有一个异步加载应用程序所需文件的函数,当加载所有文件时,我继续执行应用程序:
function loadDATA(){
var numFILES=6;
var numLoaded=0;
var dfd=$.Deferred();
function fetchJSON(fileName,toObj){
$.ajax({url: fileName, dataType: 'json',
success: function(data){
if(data){
toObj=data;
}
numLoaded++;
if(numLoaded==numFILES){dfd.resolve()};
}
});
}
fetchJSON(TOCfile,TOC);
fetchJSON(MAPfile,MAP);
fetchJSON(CONTENTfile,CONTENT);
fetchJSON(TABLESfile,TABLES);
fetchJSON(CAPTIONSfile,CAPTIONS);
fetchJSON(BOXESfile,BOXES);
return dfd;
}
对象TOC, MAP, CONTENT, TABLES, CAPTIONS, BOXES
全部预先定义为脚本顶部的{}
。
loadDATA().done(function(){
//do stuff with all loaded data here
})
一切都按预期工作除了没有为GLOBAL对象分配新值。在success
处理程序中,toObj
的值为data
,但不修改GLOBAL对象。为什么?它与范围有关吗?
感谢您对此提供任何帮助。
答案 0 :(得分:2)
您正在修改toObj
指向的内容,而不是当您说toObj = data
时全局指向的内容。
例如,这应该有效:
toObj.data = data;
那是因为你要添加一个新属性。或者,您可以这样:
$.each(data, function(key, value) {
toObj[key] = value;
});