Javascript 使用Jquery的AJAX不能跨JSP页面工作
我正在EclipseLuna上使用以下技术开发一个动态web应用程序:用于服务器端脚本的JSP、ApacheTomcatV7.0、Oracle11g作为我的数据库和Jquery 下面是我的第一个.jsp页面,它是一个基本注册页面:Javascript 使用Jquery的AJAX不能跨JSP页面工作,javascript,jquery,ajax,jsp,Javascript,Jquery,Ajax,Jsp,我正在EclipseLuna上使用以下技术开发一个动态web应用程序:用于服务器端脚本的JSP、ApacheTomcatV7.0、Oracle11g作为我的数据库和Jquery 下面是我的第一个.jsp页面,它是一个基本注册页面: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link type="text/css" rel="stylesheet" href="stylesheet.css"/>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="ValidateRegister.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
</head>
<body>
<%@include file="Home.jsp" %> <br/>
<div id="form">
<form id="login" action="RegisterProcess.jsp" method="post" name="login">
<table>
<tr><td>User Name</td><td><input type="text" name="uname"/><br/></td><td><p id="unamecheck"></p></td></tr>
<tr><td>Email ID</td><td><input type="text" name="uemail"/><br/></td><td></td></tr>
<tr><td>Password</td><td><input type="password" name="upass" /><br/></td><td></td></tr>
<tr><td></td><td><input type="submit" id="submit" value="Register"/></td><td></td></tr>
</table>
</form>
</div>
</body>
</html>
正在引用的jsp页面是:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Processing</title>
</head>
<body>
<%@page import="bean.RegisterDao"%>
<jsp:useBean id="obj" class="bean.User"/>
<jsp:setProperty name="obj" property="*"/>
<%
final int status=RegisterDao.register(obj);
if(status>0)
out.print("You are successfully registered");
else
out.print("Username already exists!");
%>
</body>
</html>
处理
0)
打印(“您已成功注册”);
其他的
打印(“用户名已经存在!”);
%>
当我按submit表单时,我会收到警告消息:“抱歉,出现问题!错误”,然后是“请求已完成!”,然后我会被重定向到RegisterProcess.jsp页面,该页面会输出正确的内容:“用户名已存在”或“注册成功”
我曾使用Firebug进行调试,但无法破译太多内容。如果您能提供任何帮助,我将不胜感激,因为我之前没有发现任何类似的问题。请查看您的表单是如何设置的。提交后,您的表单将在此处发布到RegisterProcess.jsp:
<form id="login" action="RegisterProcess.jsp" method="post" name="login">
此外,只要按下submit按钮,您就可以使用AJAX发布第二篇文章。更有可能的是,你有比赛条件
表单的POST首先完成并发出重定向,这会中断AJAX在JavaScript中的POST。我敢打赌,如果您查看抛出的错误,它将是某种形式的中断异常
是否要将用户重定向到RegisterProcess.jsp?如果没有,请从
中删除操作和方法,并让AJAX调用进行验证
是否应该将用户重定向到ReigsterProcess.jsp?如果是这样,请将表单更改为此并删除AJAX调用:
<form id="login" name="login" action="RegisterProcess.jsp" method="post" onsubmit="return validateForm();">
单击submit时,表单将首先从
validateForm()
中查找true/false返回值,然后再提交帖子并重定向到RegisterProcess.jsp。您似乎对$.ajax
调用的实际操作感到困惑。AJAX是一种允许浏览器对资源进行异步HTTP调用的技术,无需加载整个浏览器页面。您在$.ajax
调用中所做的是要求浏览器将表单中的数据提交到URLRegisterProcess.jsp
,然后以某种方式处理结果
通过在$.ajax
调用中指定json
的数据类型,您要求jQuery将来自服务器的响应视为json对象,但RegisterProcess.jsp
页面呈现为HTML。因此,$.ajax
调用将响应解释为错误,并相应地显示消息
随后在浏览器中重定向到RegisterProcess.jsp
的原因是您没有阻止默认提交注册表。一种方法是对传入事件发出preventDefault()
,或者从事件处理程序返回false
重新构造代码,以便向返回JSON的资源提交
$.ajax
请求,或从$.ajax
调用中删除JSON
数据类型说明符。+1感谢您的宝贵见解!我通过做两个更改修复了错误:-1)将onsubmit更改为始终返回false,2)从$.ajax()方法中删除了数据类型。+1非常感谢!随后,我按照您的解决方案进行了一些更改。我删除了“dataType:“json””行,并为我的onsubmit方法返回false。
<form id="login" name="login" action="RegisterProcess.jsp" method="post" onsubmit="return validateForm();">