Итак, согласно jQuery Ajax docs, он сериализует данные в форме строки запроса при отправке запросов, но установка processData:false
должна позвольте мне отправить фактический JSON в тело. К сожалению, мне сначала сложно определить первое, если это происходит, и 2-ое, что похоже на объект, отправляется на сервер. Все, что я знаю, это то, что сервер не разбирает то, что я отправляю.
При использовании http client для публикации объектного литерала {someKey:'someData'}
он работает. Но при использовании jQuery с data: {someKey:'someData'}
он терпит неудачу. К сожалению, когда я анализирую запрос в Safari, он говорит, что полезная нагрузка сообщения [object Object]
... отлично... и в Firefox сообщение пустое...
При регистрации содержимого тела на стороне Java он буквально получает [object Object]
, поэтому как отправить данные REAL 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'
});
Фактический запрос JSON будет выглядеть следующим образом:
data: '{"command":"on"}',
Где вы отправляете фактическую строку JSON. Для более общего решения используйте JSON.stringify()
для сериализации объекта в JSON, например:
data: JSON.stringify({ "command": "on" }),
Чтобы поддерживать старые браузеры, у которых нет объекта JSON
, используйте json2.js, который добавит его.
Что происходит в данный момент, так как у вас есть processData: false
, он в основном отправляет это: ({"command":"on"}).toString()
, которое [object Object]
... то, что вы видите в своем запросе.
JSON.stringify()
?