Javascript 使用Jquery的AJAX不能跨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 "-

我正在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 "-//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
调用中所做的是要求浏览器将表单中的数据提交到URL
RegisterProcess.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();">