出现的问题是: 点击发言按钮后,新的数据确实到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>
<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>
呵呵,就差这点。function getresult() {
if(sendxmlhttp.readyState == 4) {
if(sendxmlhttp.status == 200) {
var result=sendxmlhttp.responseText;
if(result=="success")
document.getElementById("info").value="";
}
}
}
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);
}
已经声明为全局的了,就不要再次创建了,会一直保持。另外我一个页面只用一个此对象,你用了两个,不知道会不会有冲突。看你已写到数据库,似乎不会。
chatlist.removeChild(chatlist.childNodes[0]);这句删除原来的话,那信息后一直叠加,定时是有用的。我的QQ是21824511,可以加我吗,我把代码发给你,帮我看看吧
[email protected]
if(chatlist.hasChildNodes())
chatlist.removeChild(chatlist.childNodes[0]);
之后加个alert,看能不能弹出消息框,可以确定后面代码有没有执行。
如果没有执行,就是语法上的错误了。
createXMLHttpRequest();
var d = GetDate();
xmlHttp.onreadystatechange = displayinfo;
xmlHttp.open("GET", "getnewmessage.aspx?d=" + d.toTimeString(), true);
xmlHttp.send(null);
}
另外那个sendmessage()函数做同样出来,邮件中忘说了。