我的申請尋求: 1.填充某些陣列(使用JSON文件) 2.處理陣列數據之前... 3. ...在準備的DIV更鬥爭與異步JavaScript
插入處理的陣列的數據目前,這是以程序方式構建的,但正如Pointy指出的那樣(http://stackoverflow.com/questions/8377344/scope-of-javascript-array-differs-from-ie9-to-firefox-chrome/ 8377401#8377401),試圖通過一些異步編程來實現。我目前的目標是讓它在所有瀏覽器中正常工作,並使其正確異步。
儘管應用程序在IE9中正常工作,但在FF和Chrome中失敗。在以下主要過程中,IE9填充並保留所有數組內容。 FF等人,然後填充然後失去它。
//globally declare some arrays (used throughout the application)
function buildTree(id) {
$(document).ready(function() {
$.getJSON(JSONfile, function(data) {
$.each(data.person, function(i, xdata) {
//populate arrays with relevant data
}); //end of first $.each()
//check 1
}); //end of first getJSON
//check 2
$.getJSON(JSONfile, function(data) {
//check 3
$.each(data.person, function(i, xdata) {
//populate arrays with relevant data, using arrays from first read
}); //end of second $.each()
//check 4
}); //end of second getJSON
//check 5
//check 6
}); //end of document.ready
}
數組是罰款:檢查1,3,4,6個 數組是空的檢測2,5
要添加困惑我的痛苦,我決定只轉儲陣列到的DIV不處理。我意外地在(= check5)中留下了警報。雖然它仍然顯示數組爲空,但當下一行執行時(將數組轉儲到DIV中),一切都很好。註釋掉警報:什麼都沒有了。
看到有什麼明顯的錯誤?
數組在2和5中爲空,因爲這些位置屬於ready處理程序。 Ajax響應處理程序(用於從就緒處理程序中創建的Ajax請求)在就緒處理程序之後執行一段時間*。 –
嘗試移動你的第二個「$」。getJSON()「調用你的」// check 1「註釋所在的位置,也就是說,將整個代碼塊移到第一個」$ .getJSON()「的回調函數中*你可以把它放在一個named函數使代碼更乾淨,如果你願意,可以減少「indenty」 – Pointy
尖尖的,這似乎工作,但後來我注意到,我仍然有一個警告工作在填充DIVs的命令之前,當我評論出來時,什麼都沒有。我可能會對它進行不正確的格式化 - Dave提到這應該在成功函數中,也許我錯過了一個逗號或者其他東西。 $ .each()... }); $ .getJSON()。 ( }); }); –