用comet监听两个属性,但不能正常显示

liguicheng2006 2009-09-22 11:01:26
小弟不太懂javascript,请高手不吝指教。小弟想用comet模拟监听一个属性文件中的两个属性,并分别显示在两个textArea中。但是搞不懂显示上的问题。
--------------------
显示页面如果把 http_request.responseText 都显示在两个textArea中,则没有问题;结果为
aTextArea
ran1,ran2
ran2,ran3
...
------------------
bTextArea
ran1,ran2
ran2,ran3
...
--------------------
这证明服务器端每次都发过来两个随机数,并用“,”连接成一个字符串,这是我想要的,页面代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script>

function createHttpRequest() {
if(window.ActiveXObject){
try {
// MSXML2
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
// MSXML
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
return null;
}
}
} else if(window.XMLHttpRequest){
return new XMLHttpRequest();
} else {
return null;
}
}

function CometEx(aText, bText) {

var http_request = createHttpRequest();
http_request.open("GET", 'http://localhost:8080/MyComet/CometServlet', true);
http_request.onreadystatechange = function() {
var text,str;
text = http_request.responseText;
str = text.split(",");
if (http_request.readyState == 3 && http_request.status == 200) {


aText.value = text;
bText.value = text;


}
};
http_request.send(null);
}
</script>
</head>
<body>
<FORM NAME="aForm">
<!-- ONSELECT="storeCaret(this);" ONCLICK="storeCaret(this);" ONKEYUP="storeCaret(this);" -->
<TEXTAREA NAME="aTextArea" ROWS="5" COLS="80" WRAP="soft" > value:</TEXTAREA>
<BR>
<textarea name="bTextArea" rows="5" cols="80" wrap="soft"> value:</textarea>
<BR>
<INPUT TYPE="button" VALUE="Go!" ONCLICK="CometEx(this.form.aTextArea, this.form.bTextArea);">
</FORM>

</body>
</html>

-----------------------------------
但是想分别显示在两个TextArea中时,总是达不到预期。
修改页面js代码为红色部分更改为:
aText.value = str[0];
bText.value = str[1];

----------------------
预期为: 实则结果为:
aTextArea aTextArea
ran1 ran1
ran2 (没了)
...
------------------ ---------------------------------
bTextArea bTextArea
ran2 ran2
ran3 ran2
... (没了)
-------------------- -------------------------------
服务器端servlet代码为:

public class CometServlet extends HttpServlet implements CometProcessor{
private static final long serialVersionUID = 1L;

private String word ;

/**
* @see HttpServlet#HttpServlet()
*/
public CometServlet() {
super();
// TODO Auto-generated constructor stub
}



@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
word = String.valueOf(Math.random());
System.out.println("--init-----------------");
}



@Override
public void event(CometEvent e) throws IOException, ServletException {
// TODO Auto-p method stub
System.out.println("--event-----------------");
if(e.getEventType() == EventType.BEGIN){
System.out.println("--eventType BEGIN-----------------");
HttpServletResponse response = e.getHttpServletResponse();
// HttpServletRequest request = e.getHttpServletRequest();
RadomNumber ran = new RadomNumber(response);
new Thread(ran).start();
} else if(e.getEventType() == EventType.READ){
System.out.println("--eventType READ -----------------");
}
}


private class RadomNumber implements Runnable{

private ServletResponse connection;
private boolean running = true;
private String ran;

RadomNumber(ServletResponse response){
this.connection = response;
}

public void stop(){
running = false;
}

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("--RadomNumber RUN-----------------");

while (running) {
System.out.println("--RadomNumber WHILE-----------------");
PrintWriter out = null;
ran = String.valueOf(Math.random());
// if (!ran.equals(word)) {
try {
out = connection.getWriter();
word = word + "," + ran;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.write(word);
out.println();
out.flush();
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
word = ran;
// }
}
}

}


}
...全文
45 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyzy_yy_pm 2009-10-15
  • 打赏
  • 举报
回复
为什么不用jquery,看着挺乱的,我也刚做了一个comet
liguicheng2006 2009-09-22
  • 打赏
  • 举报
回复
补充一下,我是部署在tomcat 6上的,用CometProcessor 实现comet

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧