我的申请寻求: 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()。 ( }); }); –