Я использую Spring 2.5.5, jQuery 1.4.4, spring-json1.3.1 (и необязательный sojo-option-0.5.0.jar - там написано необязательно , но я нуждался в этом, потому что он выдал какое-то исключение ClassNotFound относительно sojo - но это не проблема :)).
Мне интересно, почему при использовании POST в отличие от GET со следующим кодом:
$.ajax({
url: "sizesOrColors.json",
global: false,
type: "POST",//"GET",
data: "productId=1&sizeOrColorId=111&isSize=true",
dataType: "json",//html",
async:false,
success: function(javascriptObjectFromJsonFile){
var colorsOrSizesMap = javascriptObjectFromJsonFile.command.colorsOrSizesMap;
},
error: function(XMLHttpRequest, textStatus, errorThrown){
//some error handling code...
}
}
);
javascriptObjectFromJsonFile не имеет свойства «command»? При использовании метода GET я получаю свойство «command».
При доступе к функции обратного вызова success с методом POST консоль выдает:
Uncaught TypeError: Невозможно прочитать свойство 'colorsOrSizesMap' с неопределенным значением
Запомнить : если указан dataType: "json", jQuery преобразует строку jsonв объект JavaScript: Обработка типа данных JSON .(Ранее я пытался с parseJSON, но теперь я знаю, что это не подходит).
Пример строки json, которую я получаю методом GET: :
{"command":{"colorsOrSizesMap":{"123":"Blue","128":"White"},"errorsFromGet":[]}}
Теперь я подозреваюесть что-то, что связано с тем, как метод SimpleFormController.onSubmit в Spring обрабатывает метод POST (как описано в spring-json1.3.1 )
Даже преобразование типов из CommandBean-Свойства поддерживаются.
Запрос GET выполняет метод formBackingObject.
Запрос POST использует метод onSubmitAction.
Хотя здесь команда spring-json сообщает, что запрос POST выполняет запросМетод onSubmitAction, я никогда не получал его туда.И путь обработки проходит через formBackingObject. Правильный путь , который принял контроллер, был:
- formBackingObject (запрос HttpServletRequest)
- initBinder (запрос HttpServletRequest, связыватель ServletRequestDataBinder) исключения1053 * -Validator. проверка (...) метод
- onSubmit (объектная команда, ошибки BindException) выдает исключение
( не onSubmitAction )
Это независимо от использования sessionForm true или false (в конфигурации сервлета при настройке bean-компонента json SimpleFormController).
Нет проблем при получении объекта команды в методе onSubmit - он заполняетсявсе параметры из строки данных («productId = 1 & sizeOrColorId = 111 & isSize = true»).Но когда метод возвращает ModelAndView, что-то происходит либо на стороне Spring (но нет исключений или ошибок), либо на стороне клиента, когда jQuery пытается преобразовать строку json в объект javascript.Вероятно, поскольку я не получаю свойство "command" в объекте javascript с помощью метода POST (и не получаю его с помощью метода GET), на стороне сервера возникла некоторая проблема.Но что?
Если вы не можете получить решение из приведенного выше случая, я был бы рад выложить дополнительный код по вашему запросу.
Любая помощь будетоценили.Особенно сформировать кого-то, кто уже реализовал библиотеку Spring-JSON.
С уважением,
Despot
PS: Как вы видите, я избегал использования библиотеки prototype.js (метод evalJSON () и объект Ajax являются частью прототипа - см. JavaScript поведение-role.js )
РЕДАКТИРОВАТЬ: Вот так выглядит объект javascriptObjectFromJsonFile (на рисунке javascriptObjectFromJsonFile - msg):