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");
        }
      }
我的意图是让浏览器每三秒向服务器发送一次请求,但测试的结果发现,服务器只收到了一次请求(浏览器也的确每隔三秒做了一些事情,但服务器却只收到一次请求)。请问这是为什么,如何实现每三秒向服务器发送一次请求?

解决方案 »

  1.   

    setTimeout用window.setInterval代替。
      

  2.   

    //alert("send data!");把注释去了看看是什么效果啊
      

  3.   

    window.setTimeout("requestData()",3000);或者把里边的括号也去了试试,我看不出问题在哪里
      

  4.   

    还是不行,现在把完整的代码帖给大家: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...)。百思不得其解,浏览器应该是不断的发送请求啊!!!!!!
      

  5.   

    重新访问test.jsp,textArea中的数字会+1
      

  6.   

    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;
        }
    }
      

  7.   

    返回空依然输出一次“有连接!”,这样的话,浏览器中textarea也就不会有任何数据显示了,期待哥们把环境搭起来!
      

  8.   

    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="";
              }
            }
          }
      

  9.   

    <%@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;
        }
    }
    我的现在是这样子的,不停的打印中
      

  10.   

    浏览器端的确在不停的打印(即使关闭掉服务器),但我的意图是让服务器也不停的输出:访问Action了 
    有连接!现在只输出一次,迷惑!!
      

  11.   


    真的假的!我用的JB开发环境,tomcat5.5 作的服务器!
      

  12.   

    崩溃了,拉倒!结贴。谢谢 AWUSOFT 的大力支持!