Firefox没有启动onreadystatechange功能

时间:2010-12-21 22:09:40

标签: 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 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只是没有,控制台没有错误,没有。

2 个答案:

答案 0 :(得分:4)

更新回答

根据Mozilla's docs,您不会将onreadystatechange用于同步请求。哪种有意义,因为在就绪状态为4(已完成)之前请求不会返回,尽管我可能不会那样设计它。

原始答案

没有立即看到冒烟的枪,但是:你的ajax变量没有在函数中定义,所以你几乎肯定会在sprawdzstan的循环的每次迭代中覆盖它。这是否是问题还有待观察,因为你正在使用同步ajax调用。无论如何,请向var ajax;添加checkstate,以确保您不会成为Horror of Implicit Globals的牺牲品。


偏离主题:如果您可以找到一种方法来重构您的设计使用同步ajax请求,强烈建议您这样做。同步请求会锁定浏览器的UI(或多或少取决于浏览器,但很多 - 大多数? - 完全锁定,包括其他不相关的标签)。几乎总是可以重构和使用异步请求。

非主题2 :您没有在代码中使用mouseEvent,但如果您使用了javascript:,则可能需要删除onmouseover前缀中的onmouseout前缀。 {{1}}和{{1}}属性。这些属性不是URL,前缀不是(那里)协议说明符(它是一个你没有使用的标签)。

答案 1 :(得分:0)

对于那些仍然遇到这个问题的人......

您可以使用以下代码。我做的是删除功能

ajax.onreadystatechange=function(aEvt) {

并传输警报(“我在这里!”);在ajax.send();

之后
ajax=new XMLHttpRequest();

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

alert("im here!");