我为我的网站制作了一些 javascript 代码,它在 opera 和 chrome 上没有问题,但在 firefox 上没有问题。
这是脚本:
function checkstate(who,row,cell) {
var zwrot="";
var mouseEvent='onmouseover="javascript:bubelon(this.id);" onmouseout="bubeloff();"';
var cellid="";
ajax=new XMLHttpRequest();
ajax.onreadystatechange=function(aEvt) {
if (ajax.readyState===4 && ajax.status===200) {
alert("im here!");
}
};
ajax.open('GET',"oth/work_prac_stan.php?usr="+who,false);
ajax.send();
}
function sprawdzstan() {
var lol="";
var table = document.getElementById("usery");
var re = /^<a\shref\=/g;
for (var i = 1, row; row = table.rows[i]; i ++) {
if (row.cells[0].innerHTML.match(re)) {
checkstate(row.cells[1].innerHTML,row,2);
} else {
checkstate(row.cells[0].innerHTML,row,1);
}
}
}
问题是,firefox 没有运行分配给 onreadystatechange 的功能。我检查了 Firebug ,php 文件的响应是正确的。
问题出在哪里?它适用于 chrome 和 opera,firefox 只是不行,控制台没有错误,什么都没有。
最佳答案
更新的答案
根据 Mozilla's docs ,您不对同步请求使用 onreadystatechange
。这是有道理的,因为在就绪状态为 4(完成)之前请求不会返回,尽管我可能不会那样设计它。
原始答案
没有立即看到确凿的证据,但是:您的 ajax
变量未在函数内定义,因此您几乎肯定会在 sprawdzstan< 中的循环的每次迭代中覆盖它
。这是否是一个问题 还有待观察,因为您使用的是同步 ajax 调用。在任何情况下,将 var ajax;
添加到 checkstate
以确保您不会成为 Horror of Implicit Globals 的猎物。 .
题外话:如果您可能找到一种方法来重构您的设计以不使用同步 ajax 请求,强烈建议您这样做。同步请求会锁定浏览器的 UI(或多或少的程度取决于浏览器,但很多 - 大多数? - 完全锁定,包括其他不相关的选项卡)。重构和使用异步请求几乎总是可行的。
题外话 2:您没有在代码中使用 mouseEvent
,但如果您使用了,您会希望摆脱那些 javascript:
在 onmouseover
和 onmouseout
属性上添加前缀。这些属性不是 URL,前缀不是(那里)协议(protocol)说明符(它是一个标签,您没有使用)。
关于javascript - Firefox 未启动 onreadystatechange 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504434/