0

我正在发送聊天消息,并在特定的 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://部分,因为我正在使用 url-rewriting 并且我的 url 是http://localhost/chat/user/anonymous这样的,如果我只使用m.php?id=1它试图从中获取 http://localhost/chat/user/m.php显然不存在的页面......它存在于http://localhost/m.php

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

谢谢

4

1 回答 1

1

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

如果你在你的var xmlhttp 内部read_message而不是外部定义,那么每个新的函数调用都会有它自己的私有xmlhttp变量:

function read_message() {
    var xmlhttp;
    //...
}
于 2013-07-14T02:03:05.687 回答