出现的问题是: 点击发言按钮后,新的数据确实到access数据库里了,但是前台聊天室界面一直显示的还有老的数据,没有刷新.比如以前有一条信息:"你好".当发表第二条信息:"中国人"后,“中国人”这条信息成功的到数据库里了,但是在前台还一直是"你好"这条信息.我能确定更新消息的异步请求是一直在执行的,但就是不知道为什么不会取更新后的信息.下面是源码,请大家帮帮我:
<script type="text/javascript">
//////////////////////////////////////////更新消息的异步
var xmlHttp;
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}
    
function startRequest() {
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = displayinfo;
    xmlHttp.open("GET", "getnewmessage.aspx", true);
    xmlHttp.send(null);
}
    
function displayinfo() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            showinfo();
        }
    }
}
function showinfo()
{
    var chatlist=document.getElementById("content");
    if(chatlist.hasChildNodes())
    chatlist.removeChild(chatlist.childNodes[0]);
    var info=document.createTextNode(xmlHttp.responseText);
    document.getElementById("content").appendChild(info);
    window.setTimeout("startRequest()",2500);
}////////////////////////////////////////////////发送消息的异步
var sendxmlhttp;
function createSendXMLHttpRequest() {
    if (window.ActiveXObject) {
        sendxmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        sendxmlhttp = new XMLHttpRequest();
    }
}
    
function sendmessage() {
    createSendXMLHttpRequest();
    var para="para="+document.getElementById("info").value;
    sendxmlhttp.onreadystatechange = getresult;
    sendxmlhttp.open("GET", "addmessage.aspx?"+para, true);
    sendxmlhttp.send(null);
}
    
function getresult() {
    if(sendxmlhttp.readyState == 4) {
        if(sendxmlhttp.status == 200) {
            var result=sendxmlhttp.responseText;
if(result=="success")
  document.getElementById("info").value="";
        }
    }
}
</script>
</head>
<body onload="startRequest();">
    <form id="form1" runat="server">
    <span id="content">
    
    </span>
    <div>
    <input type="Text" id="info" />
    <input type="button" id="tb" value="发言" onclick="sendmessage();"/>
    </div>
    </form>
</body>
</html>

解决方案 »

  1.   

    下面这个函数中,你哪句是把返回的数据写到界面上的?
    呵呵,就差这点。function getresult() {
        if(sendxmlhttp.readyState == 4) {
            if(sendxmlhttp.status == 200) {
                var result=sendxmlhttp.responseText;
    if(result=="success")
      document.getElementById("info").value="";
            }
        }
    }
      

  2.   

    我的返回数据都是在更新消息的异步里写的啊,会定时查询数据库取数据.在下面发送的异步中不用写吧....
    function showinfo()
    {
        var chatlist=document.getElementById("content");
        if(chatlist.hasChildNodes())
        chatlist.removeChild(chatlist.childNodes[0]);
        var info=document.createTextNode(xmlHttp.responseText);
        document.getElementById("content").appendChild(info);
        window.setTimeout("startRequest()",2500);
    }
      

  3.   

    另外你的设计有点问题,你调用window.setTimeout("startRequest()",2500);是想没2500ms就刷新一下客户端吧,但你却每隔2500ms再次去创建XmlhttpRequest对象
      

  4.   

    每2500ms就要进行一次异步请求当然要建XmlhttpRequest对象吧.
      

  5.   

    sorry,前一贴没有明白楼主的意思。可能是上贴提到的问题造成的,你在2500ms后去调用startRequest,这个函数调用createXMLHttpRequest,这个对象在加载时已创建了,因此出错,下面的代码没有执行。
      

  6.   

    var xmlHttp;
    已经声明为全局的了,就不要再次创建了,会一直保持。另外我一个页面只用一个此对象,你用了两个,不知道会不会有冲突。看你已写到数据库,似乎不会。
      

  7.   

    没有出错,后面的代码也执行了。如果我不用if(chatlist.hasChildNodes())
        chatlist.removeChild(chatlist.childNodes[0]);这句删除原来的话,那信息后一直叠加,定时是有用的。我的QQ是21824511,可以加我吗,我把代码发给你,帮我看看吧
      

  8.   

    系统重做了,想明天再装.net,如果“超急”,时间可能不允许。
    [email protected]
      

  9.   

    你在
    if(chatlist.hasChildNodes())
        chatlist.removeChild(chatlist.childNodes[0]);
    之后加个alert,看能不能弹出消息框,可以确定后面代码有没有执行。
    如果没有执行,就是语法上的错误了。
      

  10.   

    已回复邮件。function startRequest() {
        createXMLHttpRequest();
        var d = GetDate();
        xmlHttp.onreadystatechange = displayinfo;
        xmlHttp.open("GET", "getnewmessage.aspx?d=" + d.toTimeString(), true);
        xmlHttp.send(null);
    }
    另外那个sendmessage()函数做同样出来,邮件中忘说了。