java - Ajax:无法重定向到AEM SLING servlet内的内容页面

标签 java servlets aem sling

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

最佳答案

通过使用response.sendRedirect("/content/test-site/sample.html");,您实际上是在发送回HTTP 301或302重定向到您的AJAX请求。如果此请求是通过浏览器导航发起的,则窗口将重定向,但是由于重定向是由AJAX发起的,因此响应将仅不包含成功的HTTP 200状态代码,并且AJAX会认为此失败可能会触发您的函数回调。

有关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:无法重定向到AEM SLING servlet内的内容页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070164/

相关文章:

java - 无法执行目标org.apache.felix:maven-scr-plugin:1.20.0

java - Spring MVC 验证模型

java - java.lang.NoClassDefFoundError:使用Guice的com/google/inject/Module

java - POJO 的 JSON 条目数组

javascript - 使用Javascript Use API获取标签列表

java - Apache Sling 中 resourceResolver.adaptTo(Session.class) 的目的是什么?

java - 将Equinox 3.2.1嵌入到WebSphere中

java - Tomcat 7 有效 web.xml 的日志内容

java - 关闭 Spring 应用程序会使数据源的 JNDI 名称脱离 jdbc 上下文

rest - Jersey/ServletContext 和启动时的资源加载