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