访问Javascript中的参数
我对JS有一个奇怪的问题(可能是一个noob bug),但我一直在坚持 在函数访问Javascript中的参数,javascript,Javascript,我对JS有一个奇怪的问题(可能是一个noob bug),但我一直在坚持 在函数fillInVersionsList中,如果我输入警报(“tempo”)或firebug中断,我可以访问参数中的数据(即:警报(pSimulator.simulatorData['LastVersion'))我得到了正确的结果。问题是,如果我在访问数据之前没有设置警报/firebug中断,我会出现JS错误pSimulator.Simulator数据未定义 $(document).ready(function() {
fillInVersionsList
中,如果我输入警报(“tempo”)
或firebug中断,我可以访问参数中的数据(即:警报(pSimulator.simulatorData['LastVersion'))
我得到了正确的结果。问题是,如果我在访问数据之前没有设置警报/firebug中断,我会出现JS错误pSimulator.Simulator数据未定义
$(document).ready(function() {
var simulator = new Simulator();
// Load SimulatorData into the simulator class
initSimulatorData(simulator);
// Fill in datas into VersionsList (2nd arg = Id of the list)
fillInVersionsList(simulator, $('#VersionsList'));
});
function initSimulatorData(pSimulator)
{
$.ajax({
url: "getData.php?action=init",
success: function(data) {
pSimulator.initSimulatorData(data);
}
});
}
function fillInVersionsList(pSimulator, pSelect)
{
//alert("tempo");
alert(pSimulator.simulatorData['LastVersion']);
pSelect.html('<option>test</option>')
}
function Simulator()
{
var simulatorData;
this.initSimulatorData = function(pSimulatorData)
{
this.simulatorData = pSimulatorData;
}
}
$(文档).ready(函数(){
var模拟器=新模拟器();
//将模拟器数据加载到模拟器类中
initSimulatorData(模拟器);
//将数据填入VersionsList(第二个参数=列表的Id)
fillInVersionsList(模拟器,$(“#版本列表”);
});
函数initSimulatorData(pSimulator)
{
$.ajax({
url:“getData.php?action=init”,
成功:功能(数据){
pSimulator.initSimulatorData(数据);
}
});
}
函数fillInVersionsList(pSimulator、pSelect)
{
//警觉(“节奏”);
警报(pSimulator.simulatorData['LastVersion']);
html('test')
}
函数模拟器()
{
var模拟数据;
this.initSimulatorData=函数(pSimulatorData)
{
this.simulatorData=pSimulatorData;
}
}
有什么办法解决这个问题吗
提前感谢我怀疑initSimulatorData
正在异步加载一些数据
添加警报
会使其足够长,以便加载数据
您需要添加某种回调函数,例如:
initSimulatorData(simulator, function () {
// Fill in datas into VersionsList (2nd arg = Id of the list)
fillInVersionsList(simulator, $('#VersionsList'));
});
从您的问题来看,模拟器需要时间来初始化,而当FillInversionList被称为pSimulator时,仍然没有完全初始化
当您发出警报时,它会得到一些时间延迟,时间模拟器将由此初始化
在模拟器完全初始化后,检查是否有回调方法,然后调用fillInVersionsList方法
initSimulatorData(模拟器)是什么有吗?这里面有没有异步代码?正如我所看到的,函数被调用了,但是pSimulator
包含了什么?可能是pSimulator
中没有simulatorData
,是的,我想这是问题所在,但是成功之处是:$.ajax的参数不应该是回调?(对不起,我添加了缺少的函数)您必须使ajax调用同步,或者从suces:Function(){pSimulator.initSimulatorData(数据);//此处调用FillInversionList()}中调用FillInversionList()。我在ajax请求中添加了“async:false”参数,现在可以使用了,谢谢:)