Javascript 页面在更新图像时被卡住

Javascript 页面在更新图像时被卡住,javascript,jquery,Javascript,Jquery,我的网页有问题,无法自动更新图像。该页面由一个键盘组成。输入4位代码后,代码将通过ajax脚本发送到alarm.php。Alarm.php更新了数据库,并返回alarmSet和Alarm Triggered(0,0 Alarm off,1,0 Alarm set,1,1 Alarm Triggered)的一些值。然后,“我的索引”页面根据返回的值显示一个图标,以显示报警状态。该页面还具有自动更新功能,用于检查数据库,并在报警状态发生变化时更新图标。所有这些都很有效。控制台按预期显示返回值、要显示

我的网页有问题,无法自动更新图像。该页面由一个键盘组成。输入4位代码后,代码将通过ajax脚本发送到alarm.php。Alarm.php更新了数据库,并返回alarmSet和Alarm Triggered(0,0 Alarm off,1,0 Alarm set,1,1 Alarm Triggered)的一些值。然后,“我的索引”页面根据返回的值显示一个图标,以显示报警状态。该页面还具有自动更新功能,用于检查数据库,并在报警状态发生变化时更新图标。所有这些都很有效。控制台按预期显示返回值、要显示的图像和页面响应。 但是如果我离开页面大约5分钟,图像就会停止更新。我仍然可以输入代码,数据库仍然更新,控制台仍然显示返回值,例如0,0 greenAlarm.jpg,但绿色图标不显示。页面似乎已锁定在显示侧。如果我刷新页面,一切又正常了。我看不出这是什么原因。希望这有意义

索引页面标题部分下面的JS脚本

//此脚本将从alarm.php获取数据
var计数=0;
setInterval(函数(){
$.ajax({
键入:“获取”,
url:“alarm.php”,
数据:“json”,
成功:功能(数据){
myObj=JSON.parse(data);//将返回的数据传递给数组myObject
console.log(myObj)
display(myObj);//发送此函数之外的数据以进行处理
}
});
}, 1000);
//根据DB返回的数据,需要以下函数来更改img
函数显示(){
函数映像(thisImg){//通过返回语句从if语句获取映像
document.getElementById(“image”).src=thisImg;
console.log(thisImg);
}
if(myObj[0]==0){
图像(“greenAlarm.jpg”);//报警关闭
计数=0;
}
如果(myObj[0]==1&&myObj[1]==0&&count<2 | | count>3){
image(“blueAlarm.jpg”);//报警集
计数=0;
}
计数=计数+1;
控制台日志(计数);
//在两个图像之间交替触发报警
if(myObj[0]==1&&myObj[1]==1&&count==2){
图像(“alarmTrig1.jpg”);
}
如果(myObj[0]==1&&myObj[1]==1&&count==3){
计数=1;
图像(“alarmTrig2.jpg”);
}
}
函数addCode(键){
var code=document.forms[0]。代码;
如果(代码值长度<4){
code.value=code.value+键;
}
if(code.value.length==4){
document.getElementById(“message”).style.display=“block”;
设置超时(报警,1000,代码值);
}
}
功能报警(代码){
$.ajax({
方法:“张贴”,
url:“alarm.php”,
数据:{code:code},
cache:false,
成功:函数(responseText){
console.log(responseText)//在控制台中显示返回的文本
}
})
emptyCode();
document.getElementById(“消息”).style.display=“无”;
}
函数submitForm(){
document.forms[0]。提交();
}
函数emptyCode(){
document.forms[0]。code.value=“”;
}

让它工作起来了。这是因为服务器超载,无法更新所有请求和页面。以下是间隔10秒的新代码。我已取出仪表,因为这会导致更多问题。尝试使用setTimeOut,但无法使其正常工作。无论如何,下面的代码现在可以工作了。我现在必须设计自己的仪表


var gaugeData=函数(){
var响应=0;
$.ajax({
url:“data.php”,
数据类型:“json”,
成功:功能(数据){
响应=(数据);
控制台日志(响应);
if(response.id==1){
display(response);//将要处理的数据发送到此函数之外
}否则{
设置超时(标准数据,5000);
}
}
});
}
功能显示(数据){
console.log(data.AlarmSet);
var thisImg=0;
如果(data.AlarmSet==0){
thisImg=“greenAlarm.jpg”;//报警关闭
}
如果(data.AlarmSet==1){
thisImg=“blueAlarm.jpg”;//报警打开
}
$(“#image”).attr(“src”,thisImg);
$(“#Gwater”).html(data.Gwater+'°;C');
$(“#Gsolar”).html(data.Gsolar+'°;C');
$(“#Grayburn”).html(data.Grayburn+'°;C');
}
设定间隔(标准数据,10000);

您的
函数display()
声明中是否存在键入错误,或者实际上是您使用的代码,因为在ajax成功中,您这样做
显示(myObj)但是你的函数声明没有参数,没有输入错误,只是我对函数缺乏了解。我将myobj传递给display函数以便使用它。我明白你的意思,需要改变这一点。但一开始一切正常,所以不确定这是否导致锁定,我不知道如何
myObj
甚至在
display()
中有一个值,可能是一个全局数组或其他东西。在
display()之外声明
image()
函数
Ok,因此我将函数display()更新为函数display(Jsonreturn),并将if语句更新为if(Jsonreturn[0]==0)。我认为这是正确的,它仍然工作,我将不得不看看它是否仍然锁定这是所有的脚本,所以它可以。我只遗漏了HTML部分。程序仍处于锁定状态。控制台显示1,0 blueAlarm.jpg和count 1,但页面显示greenAlarm.jpg