日期:2014-05-16  浏览次数:20764 次

急求! 解决AJAX 异步问题! + JSP - Web 开发 / Ajax
我想用AJAX实现 异步处理的应用
问题: 
  我从index.jsp 提交到 AjaxServlet.java 中的servlet 但是servlet 执行需要一段时间 如10分钟, 那么我在提交了之后我要跳转到一个友好页面. 提示用户 "请等待10分钟..." . 等servlet执行完成之后再将结果返回到页面. 显示结束的页面.
index.jsp 如下:
<script type="text/javascript">
  //定义异步请求对象
  var xmlHttp;
  
  //创建异步请求对象的函数
  function createXMLHttpRequest() {
  if(window.ActiveXObject) {//如果是微软的浏览器
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } else if(window.XMLHttpRequest) {//如果是其他类型的浏览器
  xmlHttp = new XMLHttpRequest();
  }
  }
  
  //向服务器发送异步请求的函数
  function startRequest() {
  // var userName = document.getElementById("txtName").value; //得到登录名文本框的值
  createXMLHttpRequest(); //调用创建异步请求的函数
  xmlHttp.onreadystatechange = handleStateChange; //当状态发生改变时,调用处理函数
  //以get方式向服务器发送请求
  //请求的资源路径为servlet/CheckUserServlet,并且通过URL重写的方式向该Servlet传递了一个参数
  //true表示此请求为异步请求,如果为false则表示不为异步请求
  xmlHttp.open("get", "./AjaxServlet.do", true); 
  xmlHttp.send(null); //开始向服务器发送请求
   
  //想在提交的过程中提示到echo.jsp --- 提示页面
document.location="echo.jsp";
window.location.href="echo.jsp"; } 但是都是不能实现跳转  
  //处理服务器返回结果的函数
  function handleStateChange() {
  //var root = XMLHttpReq.responseXML;
 // var res = root.getElementsByTagName("content")[0].firstChild.data; 
   
  if(xmlHttp.readyState == 4) {//表明客户端已经成功地发送请求 
  if(xmlHttpRe.status == 200) { //返回200表明服务器成功处理客户端的请求
  alert(xmlHttp.responseText); //responseText:获得服务器返回的字符串
  // 但是 responseText 没有值
  }
  }
  }
 </script> 
  </head>
 
  <body>
  <form name="myform" method="get" action="./AjaxServlet.do">
  <table>
  <tr>
  <td>请输入用户名:</td>
  <td>
  <input id="txtName" type="text" name="txtName" />
  </td>
  </tr>
  <tr>
  <td>请输入密码:</td>
  <td><input type="password" name="txtPwd" /></td>
  </tr>
  <tr>
  <td></td>
  <td>
  <input type="submit" value="注册" onclick="startRequest();"/>
  <input type="reset" value="重置" />
  </td>
  </tr>
  </table>
  </form>
  </body>
</html> 
AjaxServlet.java 代码如下:
public class AjaxServlet extends HttpServlet {
 /**
  * 
  */
 private static final long serialVersionUID = 1L;
 
 public void doPost(HttpServletRequest request,HttpServletResponse response)
 {
  String name= request.getParameter("txtName");
  String pwd= request.getParameter("txtPwd");
  Thread thread = new Thread();
  try {
  thread.sleep(10000);
  re