Может кто-нибудь объяснить простым способом, как заставить jQuery отправлять фактический JSON вместо строки запроса?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
Это фактически преобразует ваш тщательно подготовленный JSON в строку запроса. Одна из неприятных вещей заключается в том, что любой array: []
объект в вашем объекте будет преобразован array[]: []
, вероятно, из-за ограничений строки запроса.
javascript
jquery
json
query-string
Redsandro
источник
источник
dataType
имеет никакого отношения к тому, как данные отправляются. Он просто указывает , что тип данных вы ожидаете, что возвращается при вызове. Если вы хотите указать серверу, какой тип данных вы указываете вdata
свойстве, вам нужно установитьcontentType
свойство, аналогичноеcontentType: "application/json"
Ответы:
Вам нужно использовать
JSON.stringify
сначала сериализацию вашего объекта в JSON, а затем указать,contentType
чтобы ваш сервер понимал, что это JSON. Это должно сделать трюк:Обратите внимание, что
JSON
объект изначально доступен в браузерах, которые поддерживают JavaScript 1.7 / ECMAScript 5 или более поздней версии . Если вам нужна традиционная поддержка, вы можете использовать json2 .источник
contentType: 'application/json'
.POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard
$_POST
php вы можете видеть толькоapplication/x-www-form-urlencoded
, если вы хотите прочитать данные json, которые вы должны сделать,file_get_contents("php://input")
и, возможно, затемjson_decode()
Нет,
dataType
опция для анализа полученных данных.Чтобы опубликовать JSON, вам нужно будет самому его преобразовать в строку
JSON.stringify
и установитьprocessData
для него значениеfalse
.Обратите внимание, что не все браузеры поддерживают
JSON
объект, и, хотя jQuery поддерживает.parseJSON
его, в него не включен ни один строковый преобразователь; вам понадобится еще одна библиотека polyfill.источник
processData
вfalse
не обязательна, так какJSON.stringify
уже возвращает строку.encodeURIComponent
, не так ли?Хотя я знаю, что многие архитектуры, такие как ASP.NET MVC, имеют встроенную функциональность для обработки JSON.stringify как contentType, моя ситуация немного отличается, поэтому, возможно, это может кому-то помочь в будущем. Я знаю, это спасло бы меня часы!
Поскольку мои http-запросы обрабатываются CGI API от IBM (среда AS400) на другом поддомене, эти запросы имеют перекрестное происхождение, отсюда и jsonp. Я фактически отправляю свой ajax через объект (ы) javascript. Вот пример моего ajax POST:
источник
Если вы отправляете это обратно на asp.net и вам нужны данные в request.form [], тогда вам нужно установить тип контента «application / x-www-form-urlencoded; charset = utf-8»
Оригинальный пост здесь
Во-вторых, избавьтесь от Datatype, если вы не ожидаете возврата, POST будет ждать около 4 минут, прежде чем потерпит неудачу. Смотри здесь
источник