【发布时间】:2016-08-23 05:55:53
【问题描述】:
我不明白为什么下面的代码可以在不同的计算机上的 IE 和 Firefox 中运行,但在我的笔记本电脑上运行。
我已经卸载并重新安装了 Firefox 和 java。
每个部分都有一个确认和删除按钮,单击时可以设置确认或删除警报。
在 IE 中运行良好,在另一台计算机上运行 Firefox。
在问题计算机上,单击按钮时屏幕会闪烁,但警报既不清除也不确认。
apache2 日志中不会引发任何错误。
它基本上将三个变量传递给另一个更新 sql 表的 php 页面。
sql 中也不会抛出任何错误。
只是屏幕一闪,问题计算机上没有任何变化。
在同一台计算机上的 IE 中运行良好。
if ($_SESSION['pH1_Low_Alarm'] > 0) {
echo "<tr>";
echo "<td>";
echo $_SESSION['pH1_Low_Time'];
echo "</td>";
echo "<td>pH1 Low</td>";
if ($_SESSION['pH1_Low_Alarm'] == 1) {
echo "<td>Unacknowledged</td>";
echo "<td></td>";
echo "<td><input type=\"submit\" name=\"alarmname_ack_id\" id=\"alarmname_ack_id\" value=\"Acknowledge\" onclick=\"alarm_sql('pH1','Low_Alarm',3)\" /></td>";
}
if ($_SESSION['pH1_Low_Alarm'] == 2) {
echo "<td>Unacknowledged</td>";
echo "<td align=\"center\"><img src=\"img/email.png\" /></td>";
echo "<td><input type=\"submit\" name=\"alarmname_ack_id\" id=\"alarmname_ack_id\" value=\"Acknowledge\" onclick=\"alarm_sql('pH1','Low_Alarm',4)\" /></td>";
}
if ($_SESSION['pH1_Low_Alarm'] == 3) {
echo "<td>Acknowledged</td>";
echo "<td></td>";
echo "<td></td>";
}
if ($_SESSION['pH1_Low_Alarm'] == 4) {
echo "<td>Acknowledged</td>";
echo "<td align=\"center\"><img src=\"img/email.png\" /></td>";
echo "<td></td>";
}
echo "<td><input type=\"submit\" name=\"alarmname_ack_id\" id=\"alarmname_ack_id\" value=\"Delete\" onclick=\"alarm_sql('pH1','Low_Alarm',0)\" /></td>";
echo "</tr>";
}
onclick事件调用的函数
function alarm_sql(sensorname, alarmname, alarmvalue) {
var xmlhttp;
if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{ // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
alarm_php_string = new String;
alarm_php_string = "sql/sql_alarm_set.php?sensorname=" + sensorname + "&alarmname=" + alarmname + "&alarmvalue=" + alarmvalue;
xmlhttp.open("GET",alarm_php_string,true);
xmlhttp.send();
sleep(500);
document.location.reload(true);
}
更新
如果我右键单击确认或删除按钮并选择检查元素:
然后在调试器下的结果窗口中,我在 var 声明之后的函数开头放置一个断点。
然后,我可以在单击按钮后单步执行实际以这种方式工作的代码。
不确定当单个步骤有效但没有断点代码失败时这意味着什么。
这是当它不起作用时单击确认按钮后在控制台中显示的内容。
GET
http://192.168.1.200/yieldbuddy/www/alarms.php [HTTP/1.1 200 OK 16ms]
GET
http://192.168.1.200/yieldbuddy/www/img/background.png [HTTP/1.1 200 OK 11ms]
GET
http://192.168.1.200/yieldbuddy/www/img/banner.png [HTTP/1.1 200 OK 16ms]
GET
http://192.168.1.200/yieldbuddy/www/img/email.png
这似乎是我在笔记本电脑上安装 Window7 的问题。我可以在家里的所有其他计算机上运行此代码而不会出现问题,除了这台计算机。升级到 Firefox 48 后的所有其他计算机仍然可以毫无问题地运行代码。无论是什么原因,即使在删除并重新安装了 firefox 和 java 之后也会发生这种情况。看起来我要在问题计算机上重新安装完整的操作系统。
【问题讨论】:
-
如果没有断点,你会在 Firefox 的控制台中得到任何错误吗?另外,为什么在收到 Ajax 响应之前运行的代码中调用
.reload()?这可能就是为什么添加断点可以解决问题。 (顺便说一句,无论sleep(500);做什么,都不是如何在JS 中实现延迟。使用setTimeout()。) -
您多次使用
alarmname_ack_id(您的“确认按钮”)作为id==> 第一次:失败。您应该考虑将单引号集作为始终转义"的替代方案。 ==> 第二...建议。问题:您的$("#alarmname_ack_id").click()处理程序在哪里?
标签: javascript jquery html firefox onclick