JQuery публикует действительный JSON в теле запроса - PullRequest
156 голосов
/ 12 ноября 2010

Таким образом, согласно jQuery Ajax docs , при отправке запросов он сериализует данные в виде строки запроса, но установка processData:false должна позволить мне отправлять фактический JSON в теле.К сожалению, мне трудно сначала определить, происходит ли это, а во-вторых, как выглядит объект, который отправляется на сервер.Все, что я знаю, это то, что сервер не анализирует то, что я отправляю.

При использовании http client для публикации литерала объекта {someKey:'someData'}, это работает.Но при использовании jQuery с data: {someKey:'someData'} происходит сбой.К сожалению, когда я анализирую запрос в Safari, он говорит, что полезная нагрузка сообщения [object Object] ... great ... и в Firefox сообщение пустое ...

При регистрации содержимого тела на стороне Javaон буквально получает [object Object] так как же отправлять РЕАЛЬНЫЕ данные JSON ??

Кто-нибудь имел опыт работы с сервисом Java, сериализующим данные JSON в теле запроса, с запросом, отправленным из jQuery?

Кстати, вот полный запрос $ .ajax:

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});

1 Ответ

257 голосов
/ 12 ноября 2010

Фактический запрос JSON будет выглядеть следующим образом:

data: '{"command":"on"}',

Куда вы отправляете фактическую строку JSON.Для более общего решения используйте JSON.stringify() для сериализации объекта в JSON, например:

data: JSON.stringify({ "command": "on" }),

Для поддержки старых браузеров, которые не имеют объекта JSON,используйте json2.js , который добавит его.


В настоящее время происходит то, что у вас есть processData: false, в основном это отправляет: ({"command":"on"}).toString(), что [object Object]..что вы видите в своем запросе.

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