Подтвердить что ты не робот

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?

4b9b3361

Ответ 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.

Просто поделился, чтобы узнать, действительно ли это для вас.