Перенаправление с поста AJAX - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть вызов AJAX для моей конечной точки в контроллере Spring.После проверки информации из сообщения POST мой контроллер принимает решение о перенаправлении: переслать запрос в другое место или отправить его обратно на страницу входа.Ответ на сообщение правильный, это 302 с правильно установленным заголовком Location.Однако, когда страница выполняет вызов перенаправления, она выполняет вызов OPTIONS для URL, а затем вызов GET, который просто возвращает HTML.Отлично, у меня есть HTML, но страница остается на моей странице JSP и никогда не переходит на внешний URL.Как мне управлять этим?

Пример кода Java:

@RequestMapping(value = "/token/{token_code}", method = {RequestMethod.GET})
public void validateToken(HttpServletRequest servletRequest, HttpServletResponse servletResponse, @PathVariable String token_code) {
  //set some servlet request attributes from incoming packet info
  if(isTokenValid(token_code)) {
       servletRequest.getRequestDispatcher(MyConstants.JSP_DEVICE_INFO).forward(servletRequest, servletResponse);
   }
  else {
     servletRequest.getRequestDispatcher(MyConstants.FAILURE_URL).forward(servletRequest, servletResponse);
  }
}

@RequestMapping(value = "/token/tokenRedirect", method = {RequestMethod.POST},headers = "content-type=application/json",consumes = {MediaType.APPLICATION_JSON_VALUE})
public ModelAndView getSession(HttpServletRequest servletRequest,
                                   HttpServletResponse servletResponse,
                                   @RequestBody TokenValidateRequest request)
{
  boolean isValid = verifyCollectedInfo(request);
  if(isValid) {
      servletResponse.setHeader("Location", request.url());
      servletResponse.setStatus(302);

  }
  else {
      servletResponse.setHeader("Location", MyConstants.FAILURE_URL);
      servletResponse.setStatus(302);
  }
}

Вызов JSP Ajax:

   $.ajax({
         headers: {
             'accept': 'application/json',
             'content-type': 'application/json'
         },
         type: "POST",
         url: "tokenRedirect",
         context:document.body,
         contentType:"application/json",
         data:JSON.stringify(TokenValidateObject)

     });

Поэтому, когда я проверяю свой сетевой трафик, я вижу 302для ответа устанавливается статус, а заголовок Location содержит URL-адрес, который я хочу, но он просто выбирает HTML-код для URL-адреса перенаправления, фактически не переключая представления

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вы должны попытаться использовать внешний интерфейс для перенаправления вместо внутреннего.Ajax предназначен для создания асинхронного запроса, который затем может быть использован на внешнем интерфейсе.

Таким образом, вместо перенаправления во внутреннем интерфейсе, просто сообщите ему print местоположение перенаправления и перенаправьте, используя возвращенные данные напередний конец.

$.ajax({
     headers: {
         'accept': 'application/json',
         'content-type': 'application/json'
     },
     type: "POST",
     url: "tokenRedirect",
     context:document.body,
     contentType:"application/json",
     data:JSON.stringify(TokenValidateObject)
     success: function(locationToRedirect){
         window.location = locationToRedirect
     } 
});
0 голосов
/ 30 апреля 2019

Поскольку вы используете XHR, код на стороне клиента должен прочитать HTTP-ответ и обработать перенаправление с помощью JavaScript. Браузер будет выполнять перенаправление только для страницы, а не для вызова XHR.

См .: Перенаправление после Ajax-сообщения

Как управлять запросом на перенаправление после вызова jQuery Ajax

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...