Перенаправление на Ajax вызов jQuery

Я - новичок к 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 - Разметка моей Страницы входа в систему 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);
             }

        });
});

Я проверил своего поджигателя, что существует 302 ответа HTTP, но я не уверен, как поймать ответ и перенаправить пользователя к странице входа в систему. Какая-либо идея здесь?Спасибо.

22
задан Mark Estrada 28 May 2010 в 06:36
поделиться

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

    }); 
}); 

Вы также можете добавить переменную Header к вашему ответу и позволить браузеру решать, куда перенаправлять. В 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...
            }
        }
//....

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

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

50
ответ дан 29 November 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: