Почему я не получаю объект строки / команды json обратно при использовании jQuery ajax post метода? - PullRequest
2 голосов
/ 16 декабря 2010

Я использую 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):
http://img824.imageshack.us/i/jsstatuswhensuccessfrom.jpg/

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