AJAX не работает с 404 .... но все равно работает?Что дает? - PullRequest
4 голосов
/ 22 марта 2012

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

По сути, я делаю простой вызов AJAX, чтобы сообщить серверу, что выбрал пользователь: уже существующий проект или новый проект. AJAX выглядит так:

var dataString = 'existingProject='+ $("#existingProject").val() + '&newProjName=' + $("#newProjName").val();

//AJAX call to post selections to server
$.post('/myproj/manageProjects.html',dataString);

Подпись Spring MVC, которая обрабатывает этот почтовый вызов, выглядит следующим образом:

@RequestMapping(value="/manageProjects",produces="application/json",method=RequestMethod.POST)
public StatusResponse manageProjects(
        @RequestParam(value="existingProject",required=false) String existingProj,
        @RequestParam(value="newProjName",required=false) String newProj,
        HttpSession session){

Меня поражает то, что я получаю вызов в manageProjects с правильными переменными и ожидаемыми значениями. Сервер обрабатывает запрос и возвращает созданное мною pojo StatusResponse, включающее логическое значение (успех или сбой) и список сообщений обратной связи с сервером. Я создаю один с простым статусом «true» для успеха и возвращаю его обратно.

Затем клиент выбрасывает 404 manageProjects.html, не найденный, и продолжает свой веселый путь, как будто ничего не пошло не так.

Так .... он нашел это или нет? Если pojo типа StatusResponse является неподходящим ответом от контроллера Spring MVC, что является правильным ответом? Почему сообщение успешно попадет в контроллер, но тогда клиент получит 404?!

Спасибо за понимание ....

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

Ответы [ 2 ]

2 голосов
/ 23 января 2014

Попробуйте добавить аннотацию @ResponseBody, вот так

@RequestMapping(value="/deleteUser/{id}", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<String> deleteUser(@PathVariable("id") long id) {
    ...
    return new ResponseEntity<String>(HttpStatus.OK);
}
2 голосов
/ 22 марта 2012

Когда это происходит со мной, обычно это происходит потому, что в домике есть форма, и вы нажимаете на кнопку отправки, которая запускает xhr.Он запускает xhr, но также отправляет форму, которая по умолчанию будет соответствовать текущей ссылке, если она не указана.Поэтому попытайтесь остановить распространение события javascript, удалить отправку или просто удалить тег формы.

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