对servletA的ajax调用。 servletA需要重定向或转发到另一个内容页面。可能吗。? 我在Ajax完成功能中看到了重定向的响应,而不是重定向到内容页面。可能是我缺少一些至关重要的东西,但不知道。我试图重定向到aem servlet中的另一个内容页面。它在“网络”标签中返回200 OK响应,但从不转到指定的重定向页面。
我的同事说不可能使用Ajax调用重定向,因为它是单独的线程请求,对吗?如果我说回应,我就处于假设之中。 Sendredirect();将发出一个新请求,并将响应加载到浏览器窗口中。
@Component(
immediate = true,
service = Servlet.class,
property = {
"sling.servlet.paths=/bin/test/redirect"
})
public class TestRedirectServlet extends SlingAllMethodsServlet {
private static final long serialVersionUID = 3591693830449607948L;
@Override
protected void doGet(SlingHttpServletRequest request,
SlingHttpServletResponse response) {
PrintWriter writer = null;
try {
writer = response.getWriter();
// final RequestDispatcherOptions options = new RequestDispatcherOptions();
// final SlingHttpServletRequest syntheticRequest = new SyntheticSlingHttpServletGetRequest(request);
// request.getRequestDispatcher("/content/<project-name>/en_US.html", options).forward(syntheticRequest, response);
// return;
response.sendRedirect("/content/test-site/sample.html");
} catch(Exception e) {
} finally {
if (writer != null) {
writer.print("done");
writer.flush();
writer.close();
}
}
}
}
答案 0 :(得分:2)
通过使用response.sendRedirect("/content/test-site/sample.html");
,您实际上是在发送回 HTTP 301或302 重定向到您的AJAX请求。如果此请求是通过浏览器导航发起的,则窗口将重定向,但是由于重定向是由AJAX发起的,因此响应将仅不包含成功的 HTTP 200 状态码,并且AJAX会认为这是失败的可能会触发您的error
函数回调。
有关HTTP Status Codes的更多信息。
如前所述,您可以使用Servlet的打印编写器返回JSON响应(而不是重定向),并使用JavaScript客户端执行重定向。使用JSON之类的
{
"redirect": true,
"location": "/content/test-site/sample.html"
}
您可以像这样使用AJAX调用:
$.ajax({
url: "/bin/test/redirect",
success: function(result){
if(result.redirect){
window.location = result.location;
}
},
error: function(result){
alert("Redirection Failure");
}
});
有关jQuery AJAX的更多信息。