【问题标题】:Response sendRedirect not working with AJAX request响应 sendRedirect 不适用于 AJAX 请求
【发布时间】:2013-12-14 14:18:54
【问题描述】:

我有一个带有 java 和 EXT JS(3.4) 的 Web 应用程序。 对于所有 servlet,这就是我的 doGet 方法中的内容:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    try {
        response.sendRedirect("ErrorPage.jsp");
    } catch (Throwable t) {
        //do some logging
    }
}

我使用 EXT JS 模拟 GET 请求:

Ext.Ajax.request({
    method : 'GET',
    url : 'web'//web is the servlet name
});

页面不重定向。这是firefox的tamperData插件的输出:

如果看不到图片,则表示AJAX Get请求响应状态为302:表示重定向,并且有一个ErrorPage.jsp请求返回状态码200:表示请求成功完成。
如果我在 ajax 请求的回调中提醒响应,它会提醒 ErrorPage.jsp 的内容。我有大量这样的 AJAX 请求。是否有任何原因导致重定向不起作用。

我还添加了以下代码。但我总是得到状态为 200。虽然我可以在 firebug 中看到获取请求的第一个请求给出状态 302,而错误页面的第二个请求给出了 200。

Ext.Ajax.on('requestcomplete', function(conn, response, options) {
                alert('successful'+response.status)
            });
            Ext.Ajax.on('requestexception', function(conn, response, options) {
                alert('failed'+response.status)
            });

详情:

操作系统:Windows 7
服务器:Apache Tomcat 7.0.42
Servlet Api:使用 servlet-api-3.0.jar

【问题讨论】:

  • Ext.js 似乎将 302 响应状态视为错误,因此您需要在代码中对其进行处理。见sencha.com/forum/…
  • @Frank 更新问题
  • 根据我的经验,这就是 AJAX 请求的工作方式。在here(使用jQuery)之前,我已经发布了解决该问题的一种方法的答案,您应该能够对其进行调整以满足您的需求。从 Frank 的链接看来,Ext JS 中可能还有其他解决方法。
  • @AnthonyGrist 看起来很有希望,如果可行,会尝试这个并发布解决方案
  • 你真的需要重定向吗?你不能在面板中嵌入“ErrorPage.jsp”吗?我认为 Ext 有一些 IFrame UX。

标签: javascript ajax servlets extjs extjs3


【解决方案1】:

根据@AnthonyGrist 的帖子,这是我为 EXT JS 提出的解决方案。
在控制器中,我将 doGet 更改为:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    try {
       response.setStatus(403);
    } catch (Throwable t) {
        //do something
    }
}

在 EXT JS 中将状态码 403 识别为失败。所以在 jsp 页面中:

Ext.Ajax.on('requestexception', function(conn, response, options) {
           if(response.status=403){
                window.location.assign("ErrorPage.jsp");
 }
});

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2019-12-02
    • 2014-04-26
    • 2016-03-20
    • 1970-01-01
    相关资源
    最近更新 更多