Форматирование JSON (отправка JSON через сообщение jQuery AJAX на сервер Java/Wicket)

Я использую jQuery для отправки JSON на сервер Java, но я думаю, что мой JSON должен быть неправильным. Вот пример моих данных и того, как я их отправляю:

var lookup = {
    'name': name,
    'description': description,
    'items': [{
        'name': itemName,
        'value': itemValue
    }]
}

$.ajax({
    type: 'post',
    data: lookup,
    dataType: 'json'
});

Я использую AbstractAjaxBehavior Wicket для получения данных и хотел бы получить одну строку JSON, которую я могу проанализировать. Когда я получаю карту переданных параметров, набор ключей выглядит так:

items[0][name],
description,
name,
items[0][value],

Очевидно, я могу легко получить значения для имени и описания, но ключ для моего массива элементов испорчен. Я уверен, что это что-то простое, но я, кажется, продолжаю искать решение. Какие-либо предложения? Спасибо!


person Jared    schedule 02.07.2010    source источник
comment
Привет. Не могли бы вы опубликовать свой код Wicket AjaxBehavior. У меня проблема (stackoverflow.com/questions /4976244/ ) в том, что мой onRequest(), похоже, не получает никаких данных. Спасибо   -  person user193116    schedule 12.02.2011


Ответы (1)


Вы должны использовать JSON.stringify:

$.ajax({
    type: 'post',
    data: JSON.stringify(lookup),
    contentType: 'application/json',
    dataType: 'json'
});

Вы также должны указать «application/json» в качестве типа содержимого. По умолчанию jQuery сериализует объекты с помощью application/x-www-form-urlencoded (даже если contentType имеет значение application/json'). Так что придется делать это вручную.

РЕДАКТИРОВАТЬ: Ключ для «сообщения» должен быть типом, а не методом.

person Matthew Flaschen    schedule 02.07.2010
comment
jQuery автоматически добавляет тип содержимого как application/json, когда вы указываете тип данных как json, не так ли? Однако мне нужно было привести JSON в строку, что решило мою проблему. Спасибо, что поймали это! Кроме того, если вы хотите, чтобы ваши данные возвращались в виде значения параметра, а не ключа, отправьте его следующим образом: data: {'lookup': JSON.stringify(lookup)} - person Jared; 06.07.2010
comment
@Джаред, нет. dataType указывает, что вы ожидаете от сервера. contentType — это тип контента, который отправляете вы, и jQuery не изменит его в зависимости от типа данных. И {'lookup': JSON.stringify(lookup)} не совсем правильно. Если поиск имеет значение {foo: "bar"}, URL-адрес будет закодирован примерно так: lookup=%7B%22foo%22%3A%22bar%22%7D Очевидно, это недопустимый документ JSON. Когда вы публикуете application/json, вы не используете кодировку URL. Я думаю, это может быть связано с тем, что вы поставили method: 'post'. Это должен быть тип: «пост». Метод игнорируется, и по умолчанию используется GET. - person Matthew Flaschen; 07.07.2010
comment
Примечание. Если вы получаете сообщение об ошибке JSON is undefined (IE6/7), вам необходимо включить на свою страницу последний файл json.js json.org. - person Jared; 12.07.2010