2010-05-28 4 views
20

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

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

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

xhr.status = 200 textStatus = parseError errorThrown = «Invalid JSON -Markup моего HTML Логин PAGE-

$(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 ответ, но я не знаю, как поймать ответ и перенаправить пользователя на страницу Войти . Любая идея здесь? Спасибо.

ответ

47

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... 
      } 
     } 
//.... 

Надежда, что помогает.

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

+0

Привет, moonground .. Спасибо, я думаю, что я получил ваш момент, уже приведенный в этом примере ... Большое спасибо ... –

+0

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

+1

Как добавить переменную переадресации в ответ? – nikli