Spring MVC перенаправление возврата не работает после получения данных формы - PullRequest
0 голосов
/ 01 декабря 2019

Может кто-нибудь пересмотреть, почему не работает обратный редирект? Мой маршрут "/" отображает форму - я использую jQuery для того, чтобы упорядочить пользовательские вводы и отправить его в "/ login" и успешно получить его (проверено с помощью system.out.println) - после этого, когда я пытаюсь перенаправить на /чат / {имя пользователя}, это не работает. Когда я, например, вручную захожу в / chat / john, это работает.

Даже жестко закодированное перенаправление, возвращение "redirect: / chat / John" не работает. На вкладке Сеть веб-консоли браузера я вижу, что он отправляет трафик на / chat / John ", но веб-страница не обновляется.

Когда я пытаюсь перенаправить после успешного вызова Ajax в моем файле JavaScript,это работает. Однако, перенаправление работает, когда у меня «оба» возвращают перенаправление в моем контроллере Spring, и success: function (data) {window.location.href = '/ chat' / {username}} в моем Ajax. странный - не уверен, почему мне нужны оба для работы перенаправления

@RequestMapping(headers = "Content-Type=application/json",value="/login", method=RequestMethod.POST)
    public String message(@RequestBody List<Map<String, String>> formData, Model model) {
        String username=null;
        Map<String, String> formInputs = new HashMap<String, String>();


        for (Map<String, String> formInput : formData) {
            formInputs.put(formInput.get("name"), formInput.get("value"));
            username = formInput.get("value");
        }

        return "redirect:/chat" + username;


    }

    @RequestMapping(value="/chat/{username}",method=RequestMethod.GET)
    public String chat(@PathVariable("username") String username, Model model) {
        model.addAttribute("username", username);
        return "message.jsp";
    }

Ниже приведен мой файл JavaScript, где я публикую данные формы в "/ login"

 $(document).ready(function(){
        $("form").on('submit',function(e){
            e.preventDefault();
            $.ajax({
                url:'/login',
                type:'POST',
                data: JSON.stringify($("form").serializeArray()),
                contentType:'application/json',
                success:function(data){window.location.href='/chat'}
            })

            return false;
        })

   })
   })```

1 Ответ

0 голосов
/ 01 декабря 2019

Вы должны понимать, что перенаправление на стороне сервера отличается от вашего windows.location.href.

Во-первых, когда вы говорите redirect:/some-url на сервере, он отправляет соответствующий метод HTTP Status (302) вместе сURL, на который он был перенаправлен в браузер (jQuery API). Затем браузер (jQuery API) выполняет вызов перенаправленного URL-адреса и получает HTML-код перенаправленного URL-адреса, который доступен в качестве параметра для обратного вызова success.

Итак, все это происходит асинхронно и, наконец, в обратном вызове success вы получаете HTML-код перенаправленного URL.

Но если вы хотите перезагрузить страницу, вы ненужен редирект с сервера. Серверный метод может просто отправить Success на вызов Ajax, а затем в обработчике обратного вызова success вы можете вызвать window.location.href для перезагрузки новой страницы.

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