javascript - Firefox 未启动 onreadystatechange 函数

标签 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 只是不行,控制台没有错误,什么都没有。

最佳答案

更新的答案

根据 Mozilla's docs ,您不对同步请求使用 onreadystatechange。这是有道理的,因为在就绪状态为 4(完成)之前请求不会返回,尽管我可能不会那样设计它。

原始答案

没有立即看到确凿的证据,但是:您的 ajax 变量未在函数内定义,因此您几乎肯定会在 sprawdzstan< 中的循环的每次迭代中覆盖它。这是否是一个问题 还有待观察,因为您使用的是同步 ajax 调用。在任何情况下,将 var ajax; 添加到 checkstate 以确保您不会成为 Horror of Implicit Globals 的猎物。 .


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

题外话 2:您没有在代码中使用 mouseEvent,但如果您使用了,您会希望摆脱那些 javascript: onmouseoveronmouseout 属性上添加前缀。这些属性不是 URL,前缀不是(那里)协议(protocol)说明符(它是一个标签,您没有使用)。

关于javascript - Firefox 未启动 onreadystatechange 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504434/

相关文章:

javascript - 为什么异步函数在 Promise 稍后启动后完成执行?

javascript - 为什么 CSS transform-origin 和 transform 不能一起过渡?

javascript - JQUERY/JAVASCRIPT - 从 .find 命令中获取多个值

php - PHP 应该生成什么来返回 jQuery AJAX 请求?

javascript - 使用 <a> 标签加载 Ajax 页面

javascript - 禁用页面上的空 DIV 容器

html - Firefox 中的 td 高度无法更改

javascript - 为 html css 实现网格和标尺

javascript - 将二维数组转换为对象

javascript - Cordova OpenTok 集成 Chrome 问题