Вопрос по ajax, servlets, jquery, http-request-parameters, json – Как прочитать сложный объект JSON из jQuery в сервлете request.getParameter

1

Я создаю и отправляю JSON-объект с помощью jQuery, но я не могу понять, как правильно его проанализировать в моем Ajax-сервлете с помощью библиотеки org.json.simple.

Мой код jQuery выглядит следующим образом:

var JSONRooms = {"rooms":[]};
       $('div#rooms span.group-item').each(function(index) {
           var $substr = $(this).text().split('(');
           var $name = $substr[0];
           var $capacity = $substr[1].split(')')[0];           
           JSONRooms.rooms.push({"name":$name,"capacity":$capacity});
       });        
       $.ajax({
           type: "POST",
           url: "ParseSecondWizardAsync",          
           data: JSONRooms,        
           success: function() {
               alert("entered success function");
               window.location = "ctt-wizard-3.jsp";
           }
       });

В сервлете, когда я использую request.getParameterNames () и распечатываю его на своей консоли, я получаю имена параметровrooms[0][key] и так далее, но я никак не могу разобрать комнаты JSON Array. Я попытался разобрать объект, возвращенныйrequest.getParameter("rooms") или.getParameterValues("rooms") вариант, но они оба возвращают нулевое значение.

Что-то не так с тем, как я форматирую данные JSON в jQuery, или есть способ проанализировать JSON в сервлете, который мне не хватает?

Запросите больше кода, хотя сервлет все еще в значительной степени пуст, так как я не могу понять, как анализировать данные.

Ваш Ответ

1   ответ
2

data аргумент$.ajax() принимает объект JS, представляющий карту параметров запроса. Таким образом, любой объект JS, который вы передаете ему, будет преобразован в параметры запроса. Поскольку вы передаете ему простой элемент JS, он обрабатывается как карта параметров запроса. Вместо этого вам нужно получить доступ к отдельным параметрам точно по их представлению имени параметра запроса.

String capacity1 = request.getParameter("rooms[0][capacity]");
String name2 = request.getParameter("rooms[1][name]");
String capacity2 = request.getParameter("rooms[1][capacity]");
// ...

Вы можете найти их всех поHttpServletRequest#getParameterMap() метод:

Map<String, String[]> params = request.getParameterMap();
// ...

Вы даже можете динамически собирать все параметры следующим образом:

for (int i = 0; i < Integer.MAX_VALUE; i++) {
    String name = request.getParameter("rooms[" + i + "][name]");
    if (name == null) break;
    String capacity = request.getParameter("rooms[" + i + "][capacity]");
    // ...
}

Если ваше намерение состоит в том, чтобы передать его как настоящий объект JSON, чтобы вы могли использовать синтаксический анализатор JSON для дальнейшего разбиения его на свойства, то вам необходимо преобразовать его вString перед отправкой с использованием JS / jQuery и укажитеdata аргумент следующим образом:

data: { "rooms": roomsAsString }

Таким образом, он доступен в виде строки JSONrequest.getParameter("rooms") которые вы можете в свою очередь проанализировать с помощью произвольного JSON API.

Unrelated к конкретной проблеме, не используйте$ префикс переменной в jQuery для не-jQuery объектов. Это делает ваш код более запутанным для экспертов JS / jQuery. Используйте его только для реальных объектов jQuery, а не для простых ванильных строк или примитивов.

var $foo = "foo"; // Don't do that. Use var foo instead.
var $foo = $("someselector"); // Okay.

Похожие вопросы