我在从关联数组中检索数据时遇到问题。
要清楚,这就是我的代码:
var modelTable = {};
然后我向对象保存了一些东西:
//inside getJSON-call:
$.each(data.Models, function (index, val) {
modelTable[val.Name] = val;
});
在这种情况下, val 只是一个json对象:
{
Models : [
{
Name: "4-stroke (EBE)",
ModelNumber: "VRE",
Engine: "125ccm"
}
]
}
但是当我尝试从我的modelTable
获取数据时:
var model = modelTable["4-stroke (EBE)"];
根据IE的开发人员工具,该对象为null或未定义:
SCRIPT5007: Unable to get value of the property 'Name': object is null or undefined
修改:大型代码段:
它基本上是两个用于搜索的输入字段(使用jQuery UI自动完成;不重要)。 第一个框用于选择摩托车品牌(制造商),然后在选择品牌并包含模型名称时填充第二。第二个输入字段的值(javascript .text()
)用于查找modelTable
中的所有特定数据,因为我需要这些数据来提交我的搜索表单。
$(function () {
if ($('#mc_search').length) {
init_mc_makes();
}
});
var modelTable = {};
function init_mc_makes() {
//populates the brand drop down list in jquery ui autocomplete
}
function init_mc_models() {
//populates the model drop down list in jquery ui autocomplete
//and iterates the json data to save associative data in modelTable
//calls submitSearch(name, brand)
}
function submitSearch(name, brand) {
var model = modelTable[name];
var chosenModelNumber = model.ModelNumber; //Unable to get value of the property 'ModelNumber': object is null or undefined
//submits form with data...
}
答案 0 :(得分:0)
如果您显示的代码在dom-ready之后执行,则$()
回调将同步执行。例如,此代码的输出:
$(function () { console.log(1); });
console.log(2);
取决于它是否在 DOM准备好之前执行(它将首先输出2
,然后 - 当DOM最终准备好时 - 1
)或< em>在之后就准备好了(在这种情况下,它会输出1
,然后输出2
)。
我怀疑你的代码只在DOM准备就绪时执行(例如,它在异步加载的文件中,或者本身包含在$()
调用中)。是否发生这种情况可能确实取决于所使用的浏览器,因为脚本标记上的defer
属性的可用性或构建DOM的速度实际上可以影响这一点。这只是猜测;没有更多的背景,很难说出来。
但是,如果这是正确的,则立即调用init_mc_makes()
;特别是,它在作业之前被调用
modelTable = {}
制作完成。由于变量提升,此时modelTable
已存在,但它是undefined
。
如果这个理论是正确的,那就移动
var modelTable = {};
上面 $(...)
来电应解决问题。