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");
}
}
我的意图是让浏览器每三秒向服务器发送一次请求,但测试的结果发现,服务器只收到了一次请求(浏览器也的确每隔三秒做了一些事情,但服务器却只收到一次请求)。请问这是为什么,如何实现每三秒向服务器发送一次请求?
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");
}
}
我的意图是让浏览器每三秒向服务器发送一次请求,但测试的结果发现,服务器只收到了一次请求(浏览器也的确每隔三秒做了一些事情,但服务器却只收到一次请求)。请问这是为什么,如何实现每三秒向服务器发送一次请求?
<%@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...)。百思不得其解,浏览器应该是不断的发送请求啊!!!!!!
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;
}
}
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="";
}
}
}
<%@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;
}
}
我的现在是这样子的,不停的打印中
有连接!现在只输出一次,迷惑!!
真的假的!我用的JB开发环境,tomcat5.5 作的服务器!