jQuery розміщує дійсний json в тілі запиту


180

Отже, згідно з документами jQuery Ajax , вона надсилає дані у вигляді рядка запиту під час надсилання запитів, але налаштування processData:falseповинно дозволяти мені надсилати фактичний JSON в тіло. На жаль, мені важко визначитись спочатку, якщо це відбувається, і друге, як виглядає об'єкт, який надсилається на сервер. Все, що я знаю, - це те, що сервер не розбирає те, що я надсилаю.

При використанні http-клієнта для розміщення об'єкта буквально {someKey:'someData'}, він працює. Але при використанні jQuery з data: {someKey:'someData'}він не вдається. На жаль, коли я аналізую запит у Safari, він говорить про те, що корисне навантаження повідомлення [object Object]... чудове ... а в 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'
});

Відповіді:


293

Фактичний запит JSON виглядатиме так:

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

Куди ви надсилаєте фактичний рядок JSON. Для більш загального рішення використовуйте JSON.stringify()для серіалізації об'єкта в JSON, наприклад:

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

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


Що зараз відбувається, так як ви маєте processData: false, це в основному посилає це: ({"command":"on"}).toString()що [object Object]... ви бачите у своєму запиті.


тому мені більше не потрібен processData: false use JSON.stringify()?
брад

6
@brad - правильно, після цього не буде значення, оскільки це вже рядок, і в такому випадку jQuery не обробляє його далі .
Нік Крейвер

2
працював як шарм, велике спасибі! Чи правда тоді, що очікується, що всі органи запитів будуть рядками, які розбираються на іншому кінці?
брад

Чому jQuery розбирає dataрядок на відміну від того, щоб просто надсилати його як JSON?
Адам Зернер

Примітка сторони: якщо хто -то потребує в ньому в якості «корисного навантаження запиту тіла» замість даних форми, не забудьте включити contentType: "application/json; charset=utf-8",як уже згадувалося в цій темі: stackoverflow.com/questions/21201270 / ...
raydlevel5
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.