我正在编写一个与常规jsp-servlet交互正常工作的程序。但是当我用ajasx提交相同内容时,它的工作效果不佳。以下是我的代码。
JSP-Servlet(没有Ajax)
的index.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>Insert title here</title>
</head>
<body>
<form name="f1" id="f1" method="post" action="Controller">
<input type="text" name="name1" id="name1" /> <input type="submit" />
</form>
</body>
</html>
控制器
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String nsme = request.getParameter("name1");
request.setAttribute("name", nsme);
request.getRequestDispatcher("index1.jsp").forward(request, response);
}
index1.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>Insert title here</title>
</head>
<body>
<input type="text" value="${name}" />
</body>
</html>
使用Ajax
的index.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>Insert title here</title>
<script type="text/javascript"
src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
</head>
<body>
<form name="f1" id="f1">
<input type="text" name="name1" id="name1" /> <input type="submit"
name="x" id="x" />
</form>
<script type="text/javascript" src="SampleJS.js"></script>
</body>
</html>
SampleJS.js
$('#x').click(function() {
$.ajax({
type : 'POST',
url : 'Controller',
success : function(data) {
console.log(data)
},
});
});
控制器
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String nsme = request.getParameter("name1");
request.setAttribute("name", nsme);
request.getRequestDispatcher("index1.jsp").forward(request, response);
}
index1.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>Insert title here</title>
</head>
<body>
<input type="text" value="${name}" />
</body>
</html>
这里当我使用第一种方法时,名称打印正确。当我将它与AJAX一起使用时,令我惊讶的是,文本框中没有任何内容。
基本上,我们使用request.getRequestDispatcher("GetCaseData.jsp").forward(request, response);
转到另一个页面。在我的情况下,它的替代品是什么?
请让我知道我哪里出错了,我该怎么办呢。
答案 0 :(得分:2)
在Ajax情况下,您不发送任何表单数据。使用$.serialize
序列化表单数据并将其发送到服务器:
$('#x').click(function() {
var formData = $("#f1").serialize();
$.ajax({
type : 'POST',
url : 'Controller',
data : formData,
success : function(data) {
console.log(data)
},
});
});
答案 1 :(得分:0)
在js文件中添加 formData 之后
检查浏览器控制台
您可以在控制台中找到整个 index1.jsp html内容
将 $ {name}替换为您输入的名称。
建议将 AJAX 调用用于保持同一页面并更新页面内容,而不会在调用后刷新页面。
在上面的AJAX代码中,即使在AJAX调用完成后,您也只能在 index.jsp 中。
您可以在AJAX调用后使用javascript window.location.href =&lt;您的文件名&gt; 切换到其他页面(在您的情况下为 index1.jsp )。但是在您的情况下,页面切换到 index1.jsp 但作为新请求。您可以在浏览器的网址栏中观察相同内容。在请求范围中存储名称attibute 时。您不会在index1.jsp的name字段中看到您输入的值。