AJAX的一个实时刷新的问题 JSP版 ^O^ 
我想用XMlHttpRequest加上JSP的监听器作一个在线客户的无提交刷新 但是却一直搞不好 希望各位大侠能帮帮忙 还有就是show.jsp只显示2次 头一次显示正常 后面一次就只显示源代码了监听器代码 
package test;import java.io.*;
import java.util.*;
import javax.servlet.http.*;public class SessionListener implements HttpSessionListener,HttpSessionAttributeListener {private static List list = new ArrayList();public static int count = 0;// HttpSessionListener
public void sessionCreated(HttpSessionEvent arg0) {
count++;
logout("创建:" + new Date().toString());
}public void sessionDestroyed(HttpSessionEvent arg0) {
count--;
logout("销毁:" + new Date().toString());
}public static int getCount() {
return count;
}public void logout(String msg) {
PrintWriter out = null;
try {
out = new PrintWriter(new FileOutputStream("C:\\logout.txt", true));
out.println(msg);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}// HttpSessionAttributeListener
public void attributeAdded(HttpSessionBindingEvent arg0) {
if ("name".equals(arg0.getName())) {
list.add(arg0.getValue());
}
}public void attributeRemoved(HttpSessionBindingEvent arg0) {
if ("name".equals(arg0.getName())) {
list.remove(arg0.getValue());
}
}public void attributeReplaced(HttpSessionBindingEvent arg0) {
}public static List getList() {
return list;
}
}TestSessionAttributeListener.jsp <body>
<%
String name = new String(request.getParameter("name").getBytes(
"ISO-8859-1"), "GBK");
session.setAttribute("name", name);
out.print(name);
%>
<%
List list = SessionListener.getList();
out.println("共有" + list.size() + "名用户已登陆:");
for (int i = 0; i < list.size(); i++) {
out.println(list.get(i)); 
}
%>
</body>
TestSessionListener.jsp <body>
<%=new Integer(SessionListener.getCount()).toString() %>
<form action="TestSessionAttributeListener.jsp">
<input type="text" name="name" />
<input type="submit" />
</form>
</body>show.jsp <script language="javascript"> 
function detect() 

var xml;
try{
xml = new ActiveXObject("Microsoft.XMLHTTP"); 
}catch(e){
xml=new XMLHttpRequest();
}
xml.onreadystatechange=function(){
if(4==xml.readyState){
if(200==xml.status){
//window.alert("sssssssss");
}else if(404==xml.status){
//window.alert("zzzzzzzz");
}else if(500==xml.status){
//window.alert("bbbbbbb");
}else{
//window.alert("bbbbbbb");
}
}

var post="";//构造要携带的数据 
xml.open("POST","show.jsp",true);//使用POST方法打开一个到服务器的连接,以异步方式通信 
xml.setrequestheader("content-length",post.length); 
xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
xml.send(post);//发送数据 
var res = xml.responseText;//接收服务器返回的数据 
list.innerText=res; 
//setTimeout("detect()",1000);//每隔5秒钟轮询一次 

</script>
</head><body onload="detect()"><script type="text/javascript">
setInterval("detect()",1000);
</script><a id="list"> 
<%
List list = SessionListener.getList();
out.println("共有" + list.size() + "名用户已登陆:");
for (int i = 0; i < list.size(); i++) {
%> 
<%=list.get(i)%>
<%}%>
</a>
</body>

解决方案 »

  1.   

    so looooooooooooooooooooooooooooooooooooooooooong!
      

  2.   

    dddddddddddddddddddddddddddddddddddddddddddddddd
      

  3.   

    你在 function detect() 函数的内部写这样的代码 xml.onreadystatechange=function(){} 恐怕不妥。函数内部还有函数?这不是变成了类了吗?但你的结构又不是类的结构。所以会出错。
      

  4.   

    xml.onreadystatechange=function(){} 这个格式是这么写的
      

  5.   

    xml.onreadystatechange = onRcvData;这里的onRcvData指的是一个函数的名。