JQuery Post отправляет данные формы, а не JSON
Попытка отправить json. Здесь моя функция:
var object = ... ;
$.ajax({
type: 'POST',
url: '<url>',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: object
});
Но всякий раз, когда я проверяю Chrome, он всегда отправляет его как параметры запроса:
Request Payload:
startDate=Wed+Dec+19+2012+19%3A00%3A00+GMT-0500+(EST)&endDate=Thu+Dec+20+2012+19%3A00%3A00+GMT-0500+(EST)&
Как мне его отправить как JSON?
Ответы
Ответ 1
С JSON.stringify(object)
Пример:
$.ajax({
type: 'POST',
url: '<url>',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify(object)
});
Примечание. JSON.stringify не поддерживается во всех браузерах (http://caniuse.com/#feat=json), в частности браузер IE7 и ниже.
Если вам необходимо также поддерживать эти браузеры, вы можете использовать эту библиотеку JavaScript: https://github.com/douglascrockford/JSON-js
Ответ 2
Стрингировать с помощью JSON.stringify(object)
Измените поле data
на:
...
data: JSON.stringify(object),
...
Как вы это делаете, IMO, jQuery видит параметр в качестве словаря (пары ключ-значение) и строит из него строку, кодированную процентилем; и, следовательно, вы видите этот вывод.
Ответ 3
Мне посчастливилось отправить данные в формате по умолчанию "application/x-www-form-urlencoded" с помощью JSON в виде поля:
$.ajax({
type: 'POST',
url: '<url>',
dataType: 'json',
data: {json:JSON.stringify(object)}
});
На сервере используйте обычный метод для получения поля с именем json
.
Просто поделился, чтобы узнать, действительно ли это для вас.