2013-11-28 2 views
0

У меня есть веб-приложение с java и EXT JS (3.4). Для всех сервлетов, это то, что у меня есть в моем методе doGet:Ответ sendRedirect не работает с запросом AJAX

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

имитировать запрос GET, с EXT JS с помощью:

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

страница не перенаправляет. Это выход из tamperData плагин в браузере Firefox:

Tamper Data Output

Если вы не видите изображения, это говорит о том, что AJAX получить запрос ответил со статусом 302: это означает, перенаправлять и был запрос ErrorPage. jsp, который возвратил код состояния 200: это означает, что запрос успешно завершен.
Если я предупреждаю ответ в обратном вызове запроса ajax, он предупреждает содержимое ErrorPage.jsp. У меня есть большое количество таких запросов AJAX. Есть ли причина, по которой перенаправление не работает.

Я добавил следующий код. Но я всегда получаю статус 200. Когда хотя я могу видеть в поджигатель, что для запроса прибудет первый запрос дал статусу 302 и вторые один за ошибку Page дал 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: Использование сервлета-Апи-3.0.jar

+1

Это выглядит как Ext.js лечит статус ответа 302 как ошибка, поэтому вам нужно будет обработать его в своем коде. См. Http://www.sencha.com/forum/showthread.php?30278-Following-HTTP-Redirects-(302) –

+0

@Frank Обновленный вопрос – Shiva

+1

Это как раз то, как AJAX-запросы работают, по моему опыту. Я отправил ответ на один способ решения этого вопроса до [здесь] (http://stackoverflow.com/q/11722563/552438) (использует jQuery), вы должны быть в состоянии адаптировать это, чтобы оно соответствовало вашим потребностям. Из ссылки Фрэнка похоже, что в Ext JS могут быть другие способы решения проблемы. –

ответ

1

Основываясь на @ AnthonyGrist переживайте, это решение я придумал для Ext JS.
В контроллере я изменил doGet на:

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

Код состояния 403 признается в Ext JS как failure.So на странице JSP:

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

Если это решило вашу проблему, пожалуйста, примите ответ, нажав галочку слева. Таким образом, любой, кто споткнется здесь в будущем, сможет более легко определить решение. –