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.