#ajax #jquery #spring-mvc
#ajax #jquery #spring-mvc
Вопрос:
У меня есть некоторое веб-приложение, которое использует jQuery для отправки AJAX-запросов на сервер. Один из методов (в контроллере) возвращает объект ModelAndView, который может быть HTML-кодом или объектом JSON — зависит от существующих ошибок. Входными параметрами этого метода является массив JSON (форма). Определение метода:
@RequestMapping(value = "/generate", method = RequestMethod.POST, headers = BaseController.AJAX_HEADER)
public ModelAndView generate(@RequestBody HandlingReportForm form, HttpServletResponse response) {...}
Метод jQuery выглядит следующим образом:
jQuery.ajax({
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': JSON.stringify(data),
'dataType': 'json',
'success': callback,
error : function(jqXHR, textStatus, errorThrown) {
alert(errorThrown);
},
complete : function(jqXHR, textStatus) {
alert(textStatus);
}
});
Когда сервер возвращает массив JSON, проблем не возникает. Проблема возникает, когда ответ сервера является html. Я получаю исключение «parseerror». Я полагаю, что jQuery пытается разобрать строку ответа в JSON. Я прав?
Как я могу отключить этот автоматический синтаксический анализ? Есть ли другой способ реализовать такой универсальный метод?
Спасибо, спасибо вам
Ответ №1:
Тип данных был указан как json, следовательно, jQuery попытается интерпретировать ответ как объект json.
Тип данных — «json»: оценивает ответ как JSON и возвращает объект JavaScript. В jQuery 1.4 данные JSON анализируются строгим образом; любой неверно сформированный JSON отклоняется и выдается ошибка синтаксического анализа. (Смотрите json.org для получения дополнительной информации о правильном форматировании JSON.)
Лучше возвращать единый формат ответа.
Вы также можете исключить аргумент типа данных.
Если не указан ни один, jQuery попытается вывести его на основе MIME-типа ответа (MIME-тип XML выдаст XML, в версии 1.4 JSON выдаст объект JavaScript, в версии 1.4 script выполнит скрипт, а все остальное будет возвращено в виде строки).
Комментарии:
1. Да, я удалил тип данных, поэтому все возвращается в виде строки. Затем я преобразую его в JSON, если необходимо. Спасибо
2. Кстати, похоже, что последние версии jQuery (я использую 1.6.2) могут автоматически анализировать объект JSON даже без указания атрибута DataType.
3. да, он интерпретирует тип данных и должен преобразовать данные.