Javascript Firefox未启动onreadystatechange函数

Javascript Firefox未启动onreadystatechange函数,javascript,ajax,firefox,xmlhttprequest,Javascript,Ajax,Firefox,Xmlhttprequest,我为我的网站编写了一些javascript代码,它在opera和chrome上运行没有问题,但在firefox上不行 下面是脚本: function checkstate(who,row,cell) { var zwrot=""; var mouseEvent='onmouseover="javascript:bubelon(this.id);" onmouseout="bubeloff();"'; var cellid=""; ajax=new XMLHt

我为我的网站编写了一些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);
        }
    }
}
功能检查状态(谁、行、单元格){
var zwrot=“”;
var mouseEvent='onmouseover=“javascript:bubelon(this.id);”onmouseout=“bubeloff();”;
var cellid=“”;
ajax=新的XMLHttpRequest();
ajax.onreadystatechange=函数(aEvt){
if(ajax.readyState==4&&ajax.status==200){
警惕(“我在这里!”);
}
};
open('GET',“oth/work\u prac_stan.php?usr=“+who,false”);
ajax.send();
}
函数sprawdzstan(){
var lol=“”;
var table=document.getElementById(“usery”);
var re=/^更新的答案
根据,您不会对同步请求使用
onreadystatechange
。这是有意义的,因为请求在就绪状态为4(完成)之前不会返回,尽管我可能不会这样设计

原始答案 没有立即看到冒烟的枪,但是:您的
ajax
变量没有在函数中定义,因此您几乎肯定会在
sprawdzstan
中的每个循环迭代中覆盖它。这是否是一个问题还有待观察,因为您使用的是同步ajax调用。在任何情况下,添加
var ajax;
>以
检查状态
,以确保您不会沦为系统的牺牲品


主题外:如果您可以找到一种方法来重构您的设计,使其不使用同步ajax请求,强烈建议您这样做。同步请求会锁定浏览器的UI(在很大程度上或较小程度上取决于浏览器,但大多数情况下会完全锁定,包括其他不相关的选项卡).重构并使用异步请求几乎总是可能的


非主题2:您没有在代码中使用
mouseEvent
,但是如果您使用了,您可能希望去掉
onmouseover
onmouseout
属性上的
javascript:
前缀。这些属性不是URL,前缀(没有)协议说明符(这是一个标签,您没有使用它)。

对于仍然遇到此问题的人

您可以使用下面的代码。我所做的是删除该函数

ajax.onreadystatechange=function(aEvt) {
并在ajax.send()之后传输警报(“我在这里!”)


除了合理的建议之外,我会说'var关键字'。对于大写的'HOIG of Implicit Globals'(HOIG:),+1。在这里添加了var:“var ajax=new XMLHttpRequest();”没有区别,仍然不起作用。@WombaT:找到了(通过使用一个流行的搜索引擎进行搜索——我事先不知道——并从Richard Cornford那里找到了相同类型问题的答案,他对这方面的知识相当了解;然后去查看MDC文档)。答案已更新。只需将请求类型从同步更改为异步…如
ajax.open('GET'),“oth/work_prac_stan.php?usr=“+who,true);
…在我的例子中,它起了作用
ajax=new XMLHttpRequest();

ajax.open('GET',"oth/work_prac_stan.php?usr="+who,false);
ajax.send();

alert("im here!");