Подтвердить что ты не робот

Перенаправление на Ajax Jquery Call

Я новичок в ajax, и знаю, что кто-то уже столкнулся с этой проблемой. У меня есть устаревшее приложение, построенное на Spring MVC, у него есть перехватчик (фильтр), который перенаправляет пользователя на логин когда всякий сеанс отсутствует.

public class SessionCheckerInterceptor extends HandlerInterceptorAdapter {
 public boolean preHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler) throws Exception {
  HttpSession session = request.getSession();

  // check if userInfo exist in session
  User user = (User) session.getAttribute("user");
  if (user == null) {
   response.sendRedirect("login.htm");
   return false;
  }
  return true;
 }
}

Для запроса non-xmlhttp это работает нормально.. но когда я пытаюсь использовать ajax в своем приложении, все становится странным, он не может перенаправить на страницу входа правильно. Как проверить значение

xhr.status = 200 textStatus = parseError errorThrown = "Недействительный JSON -Markup моей страницы входа в систему HTML -

$(document).ready(function(){
        jQuery.ajax({
            type: "GET",
            url: "populateData.htm",
            dataType:"json",
            data:"userId=SampleUser",
            success:function(response){
             //code here
            },
         error: function(xhr, textStatus, errorThrown) {
                alert('Error!  Status = ' + xhr.status);
             }

        });
});

Я проверил на своем firebug, что есть ответ HTTP HTTP 302, но я не уверен, как поймать ответ и перенаправить пользователя на логин стр. Любая идея здесь? Спасибо.

4b9b3361

Ответ 1

JQuery ищет результат типа json, но поскольку перенаправление обрабатывается автоматически, он получит сгенерированный html-источник вашей страницы login.htm.

Одна идея - позволить браузеру знать, что он должен перенаправить, добавив переменную redirect к результирующему объекту и проверив его в JQuery:

$(document).ready(function(){ 
    jQuery.ajax({ 
        type: "GET", 
        url: "populateData.htm", 
        dataType:"json", 
        data:"userId=SampleUser", 
        success:function(response){ 
            if (response.redirect) {
                window.location.href = response.redirect;
            }
            else {
                // Process the expected results...
            }
        }, 
     error: function(xhr, textStatus, errorThrown) { 
            alert('Error!  Status = ' + xhr.status); 
         } 

    }); 
}); 

Вы также можете добавить переменную заголовка в свой ответ и позволить вашему браузеру решать, куда перенаправить. В Java вместо перенаправления выполните response.setHeader("REQUIRES_AUTH", "1"), а в JQuery вы делаете успешное (!):

//....
        success:function(response){ 
            if (response.getResponseHeader('REQUIRES_AUTH') === '1'){ 
                window.location.href = 'login.htm'; 
            }
            else {
                // Process the expected results...
            }
        }
//....

Надеюсь, что это поможет.

Мой ответ сильно вдохновлен этой нитью, который не должен оставлять никаких вопросов, если у вас все еще есть проблемы.