我有一个请求(暂时来自我的localhost本身)发送ajax
帖子请求,dataType
设置为json
。在jsp上,这个request
被解析并且基于某些条件,我重定向到另一个页面(驻留在服务器上)。
现在我了解重定向仅适用于不同服务器上存在的资源。但是,即使使用.forward(),我也面临着下面描述的相同问题。 我的客户端(同样,此文件目前只驻留在服务器上)是:
Somefile.html:
<html>
<head>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">
</script>
<script type="text/javascript">
$(document).ready(function() {
var payload = new Object();
payload.userInfo = new Object();
payload.userInfo.firstName = "Sam";
payload.userInfo.lastName = "Peter";
payload.userInfo.emailAddress = "speter@gmail.com";
payload.accountInfo = new Object();
payload.accountInfo.accountId = "12321";
payload.accountInfo.agentName = "Harry";
payload.accountInfo.terminalId = "1322";
payload.locale = "en-US";
payload.loggedIn = "true";
var payloadjson = JSON.stringify(payload);
$('#call').click(function ()
{
$.ajax({
type: "post",
url: "http://localhost:8280/Somepath/FormFiller.jsp",
//this is my servlet
dataType: "json",
success: function(data){
$('#output').append(data);
},
data: {postData:payloadjson}
});
});
});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<input type="button" value="Call Servlet" name="Call Servlet" id="call"/>
<div id="output"></div>
</body>
</html>
在服务器端: FormFiller.jsp
<%@ page language="java" contentType="application/x-www-form-urlencoded;
charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="org.json.simple.JSONObject"%>
<%@ page import="org.json.simple.JSONValue"%>
<%
//response.setHeader("Access-Control-Allow-Origin",
request.getHeader("Origin"));
request.setCharacterEncoding("utf8");
response.setContentType("application/json");
JSONObject jsonObj = (JSONObject)
JSONValue.parse(request.getParameter("postData"));
JSONObject userInfo = (JSONObject)
JSONValue.parse(jsonObj.get("userInfo").toString());
JSONObject accountInfo = (JSONObject)
JSONValue.parse(jsonObj.get("accountInfo").toString());
String locale = (String) jsonObj.get("locale");
String loggedIn = (String) jsonObj.get("loggedIn");
out.println(userInfo.get("firstName"));
out.println(userInfo.get("lastName"));
out.println(userInfo.get("emailAddress"));
out.println(accountInfo.get("accountId"));
out.println(accountInfo.get("agentName"));
out.println(accountInfo.get("terminalId"));
out.println(locale);
out.println(loggedIn);
if(loggedIn == "false") {
// Redirect to some site
}
else {
out.println(request.getContextPath());
// Redirect to some other site and fill the form
response.sendRedirect("/somepath/xxx/yyy/zzz"); // zzz is some html file
return;
}
%>
虽然我得到了response
(当我在chrome上查看开发者控制台时),但是浏览器上没有呈现响应(重定向页面),因此我可以直观地看到所有控件/标签等。
我也尝试了这个但是同样的问题(无法直观地看到浏览器上的响应)。
getServletContext().getRequestDispatcher("/xxx/yyy/zzz").forward(request,
response);
请帮助。
答案 0 :(得分:1)
您需要了解ajax
的含义,这是
更新网页的各个部分,而无需重新加载整个页面
因此,在您的情况下,如果您尝试渲染或重定向视图(页面)。只需发出http请求而不是ajax调用。
包含部分视图,我建议你将其渲染为,,
$('#output').html(data);
在你的ajax成功
答案 1 :(得分:0)
所以,我认为在这种情况下GET请求就足够了。这里不需要POST,因为我们没有根据post请求有效负载在服务器上创建/编辑/删除任何内容。 我发现了这篇帖子 - How to redirect with post data
如果,如果我们必须只在这里需要POST。对于我的用例,GET就足够了。感谢您的帮助。