0
在我下面的代码,我有一个异步加载所有必需的文件的应用程序的功能,当所有文件都加载我继续应用程序的执行:jQuery的阿贾克斯成功处理程序不修改全局对象
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
})
一切都按预期不同的是全局对象没有被分配的新值。在success
处理程序中,toObj
的值为data
,但GLOBAL对象未被修改。为什么?它是否与范围有关?
感谢您的任何帮助。
“你什么修改点toObj为” .....这就是我想做的事情我想修改全局对象toObj点,并没有按” t toObj'指向'相应的全局对象?我尝试过在成功处理程序内部扩展对象以及无成功:'toObj = $。extend({},data)'。对不起,如果我误解了一些东西... – ampersand 2011-04-27 16:33:29
而Javascript不会让你这样做。 JavaScript使用一种类似于Java的值传递形式。每个对象变量都是对内存地址的引用。但是,与C或C++不同,您没有语法来说“更改值,而不是这个东西指向的内存地址”。 – 2011-04-27 16:35:05
感谢迈克..是的,这就是我想要在这里做的。看到我上面的编辑..我试图复制一切使用jQuery的extend()函数,但不能这样做。 – ampersand 2011-04-27 16:37:30