$.post () не отправляет данные как json, а как x-www-form-urlencoded
Это очень странно. У меня несколько $.post() в коде, но есть один не знаю, почему отправляет параметры json как x-www-form-urlencoded вместо этого и поэтому не работает.
вот код:
$.post("/Route/SaveTransportProperties", { properties: JSON.stringify(propArray), currTravelBox: JSON.stringify(travelBoxObj), accessToken: getAccessToken()}, function(data)
    {
        //DO STUFF
    });
XHR выглядит так в Firefox:

любые идеи, почему это происходит? Я также принудительно ввел тип как "json", но тоже не работает.
4 ответов
Если вы хотите отправить данные как json, используйте $.функция ajax
вы можете указать тип post и тип данных 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'
, потому что $.post () для отправки формы-как просит. $.ajax для отправки, что вы хотите. См.contentType на $.ajax страница для получения дополнительной информации.
цитата:
при отправке данных на сервер, использовать этот тип контента. По умолчанию используется "application / x-www-form-urlencoded", что в большинстве случаев нормально. Если вы явно передаете тип содержимого в $.ajax () тогда он всегда будет отправлен на сервер (даже если данные не отправляются). Данные всегда будут передаваться на сервер с помощью кодировки UTF-8; вы должны соответствующим образом декодировать это на стороне сервера.
это также работает для меня
$.ajax({
  url: "mydomain.com/url",
  type: "POST",
  dataType: "xml/html/script/json", // expected format for response
  contentType: "application/json", // send as JSON
  data: JSON.stringify(data),
  complete: function() {
    //called when complete
  },
  success: function() {
    //called when successful
 },
  error: function() {
    //called when there is an error
  },
});
