Как отправить JSON вместо строки запроса с $."Аякс"?
может кто-нибудь объяснить простым способом, как сделать 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[]: []
, вероятно, из-за ограничений запроса sting.
4 ответа:
вы должны использовать
JSON.stringify
сначала сериализовать объект в JSON, а затем указатьcontentType
Так что ваш сервер понимает, что это JSON. Это должно сделать трюк:$.ajax({ url: url, type: "POST", data: JSON.stringify(data), contentType: "application/json", complete: callback });
отметим, что
нет,
dataType
опции для анализа полученных данных.чтобы опубликовать JSON, вам нужно будет самостоятельно stringify его через
JSON.stringify
и выберите доfalse
.$.ajax({ url: url, type: "POST", data: JSON.stringify(data), processData: false, contentType: "application/json; charset=UTF-8", complete: callback });
обратите внимание, что не все браузеры поддерживают тег
хотя я знаю много архитектур, таких как ASP.NET MVC имеют встроенную функциональность для обработки JSON.stringify как contentType моя ситуация немного отличается, так что, возможно, это может помочь кому-то в будущем. Я знаю, что это сэкономило бы мне часа!
поскольку мои http-запросы обрабатываются CGI API от IBM (среда AS400) на другом поддомене, эти запросы являются перекрестными, следовательно, jsonp. Я фактически отправляю свой ajax через объект(ы) javascript. Вот пример моего ajax POST:
var data = {USER : localProfile, INSTANCE : "HTHACKNEY", PAGE : $('select[name="PAGE"]').val(), TITLE : $("input[name='TITLE']").val(), HTML : html, STARTDATE : $("input[name='STARTDATE']").val(), ENDDATE : $("input[name='ENDDATE']").val(), ARCHIVE : $("input[name='ARCHIVE']").val(), ACTIVE : $("input[name='ACTIVE']").val(), URGENT : $("input[name='URGENT']").val(), AUTHLST : authStr}; //console.log(data); $.ajax({ type: "POST", url: "http://www.domian.com/webservicepgm?callback=?", data: data, dataType:'jsonp' }). done(function(data){ //handle data.WHATEVER });
Если вы отправляете это обратно asp.net и нужны данные в запросе.form[] затем вам нужно будет установить тип контента в "application / x-www-form-urlencoded; charset=utf-8"
оригинальное сообщение здесь
во-вторых, избавьтесь от типа данных, если вы не ожидаете возврата, сообщение будет ждать около 4 минут до сбоя. Смотрите здесь