Ajax调用不在firefox中更新DIV。在Chrome中运行良好

时间:2013-07-14 01:33:06

标签: javascript jquery ajax

我正在发送聊天消息,特别是div接收它们。所有用ajax读写。在Chrome中一切正常,但在Firefox中,它没有显示......

这是我的代码: -

var xmlhttp = false;

function read_message() {
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("chatBox").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET",'http://<?php echo $domain; ?>/m.php?id='+<?php echo $id; ?>,true);
    xmlhttp.setRequestHeader("Content-type","text/html");
    xmlhttp.send();
}

 $(document).ready(function(){
     setInterval("read_message()", 800);
 });

$ domain在Header页面中定义,它是同一个域,其中文件正在运行...即

如果我的聊天页面在localhost中,则$ domain也是localhost .. 我知道ajax的原始政策相同,但由于使用http://是这个问题。

我不能离开http://部分,因为我正在使用网址重写,而我的网址就像http://localhost/chat/user/anonymous,所以,如果我只使用m.php?id=1而不是尝试从网页获取网页 http://localhost/chat/user/m.php显然不存在......它存在于http://localhost/m.php

如果上面提到的点是错误的,有什么方法可以解决它,或者任何其他更好的帮助都会很棒。

由于

1 个答案:

答案 0 :(得分:1)

当您触发两个请求时,如果第二个请求在第一个请求解析之前触发,xmlhttp.responseText侦听器中的onreadystatechange将指向第二个(未解析的)请求的responseText第一个请求的监听器触发。这是因为您只使用为所有请求共享的单个全局xmlhttp变量。

如果您在var xmlhttp内定义read_message ,而不是在xmlhttp之外,那么每个新的函数调用都将拥有自己的私有function read_message() { var xmlhttp; //... } 变量:< / p>

{{1}}