我正在为DYI项目构建一个Web界面,我正面临一个我无法弄清楚的错误。希望你能帮我一臂之力。 (顺便说一句,我是js / jquery的初学者)
这是我遇到问题的一段代码。
var lights_array = [20, 24, 25, 15, 28, 13, 19, 22, 21, 23, 31, 26, 27, 14, 3, 9, 7, 5, 8, 4, 6, 17, 18, 10, 12, 11, 16, 29, 30];
function pull_light_status (lights_array){
$.each(lights_array,function(myindex, myvalue){
$.post( "resources/php/individual_json.php", { veraip: "10.20.174.10", device_id: + myvalue})
.done(function (json) {
var vera_obj = JSON.parse(json);
var light_state = vera_obj["Device_Num_"+myvalue].states[1].value;
if (light_state === "1") {
$("#light"+myvalue).attr("src","resources/img/on_toggle.png");
} else {
$("#light"+myvalue).attr("src","resources/img/off_toggle.png");
}
console.log("Checkpoint - Loading light status");
})
})
}
pull_light_status(lights_array);
setInterval(pull_light_status,10000); //this is what is giving me issues
好的,这是我的问题。没有行setInterval(pull_light_status,10000);
它可以正常工作,当页面加载时,它会加载我的灯光状态并相应地设置图像。
一旦我添加了行setInterval(pull_light_status,10000);
,所以状态指示灯每10秒刷新一次(如果我手动将指示灯关闭)我不会每10秒获得一次检查点消息,而是每隔10秒我得到一个错误
我得到的错误是:
未捕获的TypeError:无法读取属性'长度'未定义的 n.extend.each @jquery-2.1.4.min.js:2 pull_light_status @ script2.js:66
PD。 scrip2.js的第66行就是这个
$.each(lights_array,function(myindex, myvalue){
希望您能够了解问题是什么以及如何解决问题。
提前致谢
答案 0 :(得分:1)
当您使用该函数作为setInterval
的回调时,您不会将该数组作为参数发送,因此尝试访问该数组的函数中的代码将失败。
您可以在代码周围放置一个函数包装器,以便可以使用参数
调用该函数setInterval(function(){
pull_light_status(lights_array);
},10000);
答案 1 :(得分:0)
或者与Guffa的答案相反,更改功能:
function pull_light_status (lights_array){
到此:
function pull_light_status (){
因为你的函数有一个命名参数,所以函数会将它用作局部变量。您的setInterval没有传递任何参数,因此该函数将其设置为undefined。如果省略函数参数,它将在函数范围之外查找并找到数组定义。