首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

急求! 解决AJAX 异步有关问题! + JSP

2012-02-11 
急求! 解决AJAX 异步问题!+ JSP - Web 开发 / Ajax我想用AJAX实现 异步处理的应用问题:我从index.jsp 提交

急求! 解决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);
  response.getWriter().println(name);
  response.getWriter().print(pwd);
  } catch (InterruptedException e) {


  // TODO Auto-generated catch block
  e.printStackTrace();
  } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
 }
 public void doGet(HttpServletRequest request,HttpServletResponse response)
 {
  doPost(request,response);
 }
}

[解决办法]
这样一直等待可能会超时的,你可以将处理过程保存在Session里面,没10秒请求一次检查状态是否改变。
[解决办法]
如果页面没有脚本错误,
window.location.href="echo.jsp";
是应该可以的。

不过,页面都跳转了,handleStateChange里面的代码就不执行了,加这些代码就没有意义了。

另外注意缓存的问题
xmlHttp.open("get", "./AjaxServlet.do", true);

你采用Get方法,url后面都没有参数,
String name= request.getParameter("txtName");
String pwd= request.getParameter("txtPwd");
自然就是null了
[解决办法]
能不能到server端确认一下response发出来没有?我一般就是在这样两边查的。
不能跳转说实话不清楚,不过如果是我的话会按执行过程跟一下,总归有个地方有问题。
[解决办法]
var win;
当AJAX请求发出的时候
win = new Ext.Window({
layout: 'fit',
width: 800,
title: '请等待。。。',
closeAction: 'hide',
autoScroll: true,
height: 450,
resizable: false,
shadow: true,
modal: true,
closable: true,
minimizable: true,
maximizable: true,
animCollapse: true
});
win.show();
等于弄一个透明图层上面显示一个window 里面放上字体提示。 如果ajax 返回成功 或者 失败 调用win.hide();隐藏此窗口即可

热点排行