$.post() не отправляет данные как json, а вместо этого вместо x-www-form-urlencoded
Это действительно странно. Я имею несколько $.post()
в коде, но есть один dunno, потому что вместо этого отправляет json-параметры как x-www-form-urlencoded
и, следовательно, не работает.
Здесь код:
$.post("/Route/SaveTransportProperties", { properties: JSON.stringify(propArray), currTravelBox: JSON.stringify(travelBoxObj), accessToken: getAccessToken()}, function(data)
{
//DO STUFF
});
XHR выглядит так в Firefox:
![Firefox screenshot]()
Любые идеи, почему это происходит? Я также применял тип как "json", но не работает.
Ответы
Ответ 1
Если вы хотите отправить данные как json, используйте функцию $.ajax
Вы можете указать тип post и dataType json.
$.ajax({
url: "mydomain.com/url",
type: "POST",
dataType: "xml/html/script/json", // expected format for response
contentType: "application/json", // send as JSON
data: $.param( $("Element or Expression") ),
complete: function() {
//called when complete
},
success: function() {
//called when successful
},
error: function() {
//called when there is an error
},
});
Взято из документации ajax
http://api.jquery.com/jQuery.ajax/
contentTypeString
Default: 'application/x-www-form-urlencoded; charset=UTF-8'
Ответ 2
Потому что $. post() предназначен для отправки запросов в форме. $. ajax предназначен для отправки всего, что вы хотите. Подробнее см. contentType
на странице $.ajax
.
Цитата:
При отправке данных на сервер используйте этот тип содержимого. По умолчанию используется "application/x-www-form-urlencoded", что отлично подходит для большинства случаев. Если вы явно передаете контент-тип в $.ajax(), он всегда будет отправлен на сервер (даже если данные не отправлены). Данные всегда будут передаваться на сервер с использованием кодировки UTF-8; вы должны соответствующим образом декодировать его на стороне сервера.
Ответ 3
вы также можете заставить свои данные быть json в функции успеха:
data = JSON.parse(data);