java - Ajax : Not able to redirect to a content page inside AEM SLING servlet

标签 java servlets aem sling

对 servletA 的 ajax 调用。 servletA需要重定向或转发到另一个内容页面。是否可以。? 我看到 Ajax 完成函数中的重定向响应,而不是重定向到重定向的内容页面。也许我错过了一些重要但不知道的事情。我试图重定向到 aem servlet 中的另一个内容页面。它在网络选项卡中返回 200 OK 响应,但永远不会转到指定的重定向页面。

我的同事说 Ajax 调用重定向是不可能的,因为它是单独的线程请求,是吗?如果我说回应,我是在假设。发送重定向();将发出新请求并将响应加载到浏览器窗口上。

@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();
            }
        }
    }
}

最佳答案

通过使用 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 .

关于java - Ajax : Not able to redirect to a content page inside AEM SLING servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070164/

相关文章:

java - 时间复杂度 : Getting incorrect result

java - 创建所有排列数组的排列算法

jsp - JSP 形式的空字段是否为 null 或 ""?

javascript - AEM 获取子节点内容

aem - 将参数传递给 data-sly-include in sightly/HTL

aem - cq5 获取父节点属性

java - 如何使用Java API从hbase中的表中选择特定列

java - 有 Java/PHP 桥吗?

java - <context-param> 和 <init-param> 之间的区别

java - 在 Maven 中指定 Apache Tomcat "lib"文件夹