急求! 解决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