作爲@marc(間接)點,你必須瞭解ajax調用的性質和事件模型。 解析JS文件後立即執行ajax調用,結果以異步方式返回。因此,您的代碼時間軸看起來像
00 set global = []
01 AJAX call /someurl/ -------------------\
02 check global /* it's empty */ \
03 do something else [process AJAX call on server, send result]
... /
42 AJAX call is completed <----------------/
43 call success ----------------------------------> global.push(result)
44 at this point of time you can access global
這是時間軸,而不是執行順序。 AJAX調用和響應之間的時間可能是任意的,包括超時或服務器端錯誤的情況。
因此,您應該怎麼做?
1)JS正常solurtion - 一個回調,你已經有了既可以
1.1)設置全局和調用其它功能成功的功能,或
1.2)做數據所需的操作
2)事件 - 這應該避免的99% - 如果你想使用在代碼中的多個部分數據,讀的jQuery事件機制
3)同步調用,如@marc建議更好案例。我知道什麼時候可能需要的唯一情況是當你必須要求來自第三方來源的強制性數據時,甚至在這種情況下你可以在服務器上做到這一點(儘管至少可以同步AJAX是可以接受的)
你的代碼聽起來很合理還要確保JSON有效(http://jsonlint.com/) – ctrlShiftBryan