在我一直在工作的主要應用程序中,並且Stack Overflow的專家已經成爲救生員,我決定避免一些我見過的異步併發症,將主程序的SortArray分支拆分爲它自己的功能。測試在函數返回這些結果之前顯示完美的結果。爲什麼我的數組「未定義?」
這樣可以節省我一些處理的方式是我可以在之前對數組進行排序,然後將其發送到主處理函數中。這樣,所有數組在整個ProcessArray函數中的處理都是相同的。
在下面的代碼示例中,我顯示了當前的結構,這是我給出的建議(最近由jfriend00提供)的解釋。我做了兩個$ .getJSON調用,第一個是成功子句中的第二個,並且在我結束第一個getJSON調用之前(此時我已經測試並驗證了在此處未顯示的處理過程中創建的數組),我調用SortArray在其中一個數組上,然後將它傳遞給將結果發送到ProcessArray的例程。
儘管SortArray代碼本身在內成功,但通過此方法進入ProcessArray的數組被標記爲「未定義」。如果這不是異步處理的更多問題,那麼我認爲這是數組引用的問題。但我不知道如何解決它。
function buildTree(centralID) {
$(document).ready(function(){
$.getJSON('MurakiMaida.json', function(data) {
$.each(data.person, function(i, xdata) {
...create a small set of arrays
}); //end of first $.each() routine
$.getJSON('MurakiMaida.json', function(data) {
$.each(data.person, function(i, xdata) {
...use an array just created to create another
}); //end of second each()
}); //end of second getJSON
$("#spchildren").html(ProcessArray(SortArray(childIDs, true), centralID, false));
}); //end of first getJSON
}); //document.ready
}
你從'SortArray'返回什麼?並在'ProcessArray'中作爲參數?如果問題僅與這些方法有關,那麼如果我們看不到方法,我們可以通過什麼機制來解決問題?我假設沒有依賴於第二個JSON調用,這將不會返回。 –
除了你似乎兩次加載完全相同的內容(相同的JSON文件,爲什麼不只是迭代接收到的數據兩次?)之外,你在嵌套的回調函數中重複使用相同的變量名稱。雖然不一定如此,但這是在尋求麻煩。 – Bart
假設childIDs是在$ .getJSON調用之一的成功時創建的,它仍然是像2天前那樣的問題,並由Larry K在下面提到:http://stackoverflow.com/questions/8377344/scope-of-javascript-array -differs-from-ie9-to-firefox-chrome –