AJAX无法定时刷新(解决立即结贴)

sszhangy 2007-09-01 08:16:04
jsp文件中有如下两个javascript函数:

function getXHR(){
try {
xhr = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
xhr = false;
}
}
}
return xhr;
}


function requestData(){
try{
var x=getXHR();
if(x){
//alert("send data!");
x.onreadyStatechange=processMessage;
x.open("GET","messageProcessAction.do");
x.send(null);
window.setTimeout("requestData()",3000);
}
}catch(e){
alert("error3");
}
}


我的意图是让浏览器每三秒向服务器发送一次请求,但测试的结果发现,服务器只收到了一次请求(浏览器也的确每隔三秒做了一些事情,但服务器却只收到一次请求)。请问这是为什么,如何实现每三秒向服务器发送一次请求?
...全文
372 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
awusoft 2007-09-03
  • 打赏
  • 举报
回复
不客气
sszhangy 2007-09-02
  • 打赏
  • 举报
回复
浏览器端的确在不停的打印(即使关闭掉服务器),但我的意图是让服务器也不停的输出:

访问Action了
有连接!

现在只输出一次,迷惑!!

sszhangy 2007-09-02
  • 打赏
  • 举报
回复
崩溃了,拉倒!

结贴。

谢谢 AWUSOFT 的大力支持!
sszhangy 2007-09-02
  • 打赏
  • 举报
回复

真的假的!

我用的JB开发环境,tomcat5.5 作的服务器!
awusoft 2007-09-02
  • 打赏
  • 举报
回复
晕啊,我的是服务器不停的输出哦
awusoft 2007-09-01
  • 打赏
  • 举报
回复
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@page contentType="text/html; charset=gb2312"%>
<html:html>
<head>
<title>AJAX测试</title>
<script type="text/javascript">
var xhr = false;
//var online=true;
//var count=0;

function getXHR(){
var x;
try {
x = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
x = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
x = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
x = false;
}
}
}
return x;
}

function init(){
window.setInterval("requestData()",3000);
}
var jj=1;
function requestData(){
try{
xhr=new ActiveXObject("Msxml2.XMLHTTP");
if(xhr){
//alert("send data!");
xhr.onreadyStatechange=processMessage;
xhr.open("GET","messageProcessAction.do");
jj++;
xhr.send(null);
}
}catch(e){
alert("error3");
}
}

function processMessage(){
if(xhr.readyState==4){
if(xhr.status==200){
var message=xhr.responseText;
var msgArea=document.getElementById("msgArea");
msgArea.innerHTML=message+msgArea.innerHTML;
//message="";
}
}
}

</script>
</head>
<body >
<textarea cols="20" rows="10" id="msgArea"> </textarea>
<%
System.out.println("访问JSP了");
%>
<br />
<br />
<script>
init();
</script>
</body>
</html:html>





package com.awu.struts.action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import java.io.*;

public class MessageProcessAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
System.out.println("访问Action了");
int counter=1;
PrintWriter out=null;
try {
out = response.getWriter();
out.flush();
out.println("fff");
//out.println(Integer.parseInt(request.getParameter("id"))+100+"");
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("有连接!");
return null;
}
}


我的现在是这样子的,不停的打印中
awusoft 2007-09-01
  • 打赏
  • 举报
回复
你加个参数到服务器试试
sszhangy 2007-09-01
  • 打赏
  • 举报
回复
试了,每次都是200
awusoft 2007-09-01
  • 打赏
  • 举报
回复
function processMessage(){
if(xhr.readyState==4){
alert(xhr.status);//试试它返回的是多少啊
if(xhr.status==200){
var message=xhr.responseText;
var msgArea=document.getElementById("msgArea");
msgArea.innerHTML=message+msgArea.innerHTML;
//message="";
}
}
}
sszhangy 2007-09-01
  • 打赏
  • 举报
回复
呵呵,试了好些方法,没找出毛病在哪!!

期待楼上!
awusoft 2007-09-01
  • 打赏
  • 举报
回复
呵呵,我现在的居然一句也有打印出来,可能是环境没搭建好
sszhangy 2007-09-01
  • 打赏
  • 举报
回复
返回空依然输出一次“有连接!”,

这样的话,浏览器中textarea也就不会有任何数据显示了,

期待哥们把环境搭起来!
awusoft 2007-09-01
  • 打赏
  • 举报
回复
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import imtest.form.MessageForm;
import org.apache.struts.action.Action;

import java.io.*;

public class MessageProcessAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
int counter=1;
System.out.println("有连接!");

return null;
}
}
awusoft 2007-09-01
  • 打赏
  • 举报
回复
唉,我的环境没有搭起来,没办法帮你测试了
sszhangy 2007-09-01
  • 打赏
  • 举报
回复
重新访问test.jsp,textArea中的数字会+1
sszhangy 2007-09-01
  • 打赏
  • 举报
回复
这次变成了:1 1 1 1 ...

忘改了!!!
sszhangy 2007-09-01
  • 打赏
  • 举报
回复
还是不行,现在把完整的代码帖给大家:

test.jsp:

<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@page contentType="text/html; charset=gb2312"%>
<html:html>
<head>
<title>AJAX测试</title>
<script type="text/javascript">
var xhr = false;
//var online=true;
//var count=0;

function getXHR(){
var x;
try {
x = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
x = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
x = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
x = false;
}
}
}
return x;
}

function init(){
window.setInterval("requestData()",3000);
}


function requestData(){
try{
xhr=getXHR();
if(xhr){
//alert("send data!");
xhr.onreadyStatechange=processMessage;
xhr.open("GET","messageProcessAction.do");
xhr.send(null);

}
}catch(e){
alert("error3");
}
}

function processMessage(){
if(xhr.readyState==4){
if(xhr.status==200){
var message=xhr.responseText;
var msgArea=document.getElementById("msgArea");
msgArea.innerHTML=message+msgArea.innerHTML;
//message="";
}
}
}

</script>
</head>
<body onload="init()">
<textarea cols="20" rows="10" id="msgArea"> </textarea>
<br />as;dlkfja;lskdjf;eptoiyg;'l\f[gplhd\f;ghl'dsflk
<br />lkjoiertwkj;sadfkjg';lkhdfghfdjffkjgfdgjsd
</body>
</html:html>


服务器端有一struts的Action:

import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import imtest.form.MessageForm;
import org.apache.struts.action.Action;

import java.io.*;

public class MessageProcessAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
MessageForm messageForm = (MessageForm) form;
int counter=1;
System.out.println("有连接!");

return mapping.findForward("success");
}
}

mapping.findForward("success"); 转发给另一个jsp页面 reply.jsp:

<%!
int counter=0;
%>
<%
out.println(counter++);
%>

现在的问题是:打开浏览器,访问test.jsp ,服务端只输出一次“有链接!”,浏览器的textArea 中却不断的有数字填充(如:0 0 0 0...),在此打开浏览器,访问test.jsp ,服务端又输出一次“有链接!”,textArea 中却不断的有数字填充(这次变成:0 0 0 0...)。

百思不得其解,浏览器应该是不断的发送请求啊!!!!!!
awusoft 2007-09-01
  • 打赏
  • 举报
回复
window.setTimeout("requestData()",3000);或者把里边的括号也去了试试,我看不出问题在哪里
awusoft 2007-09-01
  • 打赏
  • 举报
回复
//alert("send data!");把注释去了看看是什么效果啊
sszhangy 2007-09-01
  • 打赏
  • 举报
回复
效果的确有点不一样,但服务器还是不能每隔三秒收到一次请求
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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