我为我的网站制作了一些javascript代码,它在opera和chrome上没有问题,但在Firefox上没有.
这是脚本:
function checkstate(who,row,cell) {
var zwrot="";
var mouseEvent='onmouSEOver="javascript:bubelon(this.id);" onm ouSEOut="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;检查状态以确保您不会成为Horror of Implicit Globals的牺牲品.
偏离主题:如果您可能找到一种方法来重构您的设计以不使用同步ajax请求,强烈建议您这样做.同步请求会锁定浏览器的UI(取决于浏览器,或多或少 – 大多数? – 完全锁定,包括其他不相关的选项卡).几乎总是可以重构和使用异步请求.
偏离主题2:你没有在你的代码中使用mouseEvent,但如果你是,你会想要摆脱onmouSEOver和onmouSEOut属性上的那些javascript:前缀.这些属性不是URL,前缀不是(那里)协议说明符(它是一个标签,你没有使用它).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。