В моем коде ниже у меня есть функция, которая асинхронно загружает все файлы, необходимые для приложения, и когда все файлы загружены, я продолжаю выполнение приложения:
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
предопределены глобально до {}
в верхней части скрипта.
loaDATA называется так:
loadDATA().done(function(){
//do stuff with all loaded data here
})
Все работает, как и ожидалось, за исключением того, что объектам GLOBAL не присвоено новое значение. ВНУТРИ обработчика success
, toObj
имеет значение data
, но объект GLOBAL не изменяется. Зачем? Это имеет отношение к сфере?
Спасибо за любую помощь в этом.