这让我绝对不能成为初学者的JavaScript插件。
我有一个名为arrayA的数组,其中包含以下数据(在我的实际代码中,我使用[]声明arrayA,然后使用$ .getJSON来提取包含数据的文件):
arrayA = [
{
"Key": "Key1",
"Value": {
"info1": "298431",
"info2": "55.035",
"info3": "11.375",
},
"Name": "Key1"
}
]
在我的HTML页面中,我有一个脚本标记/部分,这是在那里定义的。在arrayA之后,我有一个名为funcA()的函数,我试着去做#34; stuff"这包括找到" Key1"的索引。举个例子。
当在行中执行console.log时,它总是报告为0,但在使用Chrome控制台检查长度时,它会报告正确数量的对象(8950)。
不确定是什么问题。潜在的变量范围或arrayA初始化和加载数据的方式?有人可以帮忙吗?
为了完整性:
<script type="text/javascript">
var arrayA = [];
$.getJSON('./source.json', function(data) {
arrayA = data;
});
function funcA() {
//Do stuff to find indexOf "Key1"
}
</script>
/ d
答案 0 :(得分:2)
问题很可能是funcA()
运行时,数据尚未可用。
试试这个:
<script type="text/javascript">
var arrayA = [];
$.getJSON('./source.json', function(data) {
arrayA = data;
console.log('Data was loaded', arrayA);
});
function funcA() {
//Do stuff to find indexOf "Key1"
console.log('funcA() ran');
}
</script>
然后你会看到事情发生的顺序。当然$.getJSON
是异步函数,你不能依赖于总是以相同顺序发生的事情。因此,您应该查看promises或回调,而不是使用全局变量。
答案 1 :(得分:1)
您正在异步地将数据分配给arrayA
- 当您第一次检查getJSON
的回调函数尚未完成时。如果您想对数据进行操作,可以在回调中调用funcA
:
$.getJSON('./source.json', function(data) {
arrayA = data;
funcA();
});