$.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: Firefox screenshot

любые идеи, почему это происходит? Я также принудительно ввел тип как "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; вы должны соответствующим образом декодировать это на стороне сервера.


вы также можете заставить ваши данные быть json в функции успеха: data = JSON.parse(data);


это также работает для меня

$.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
  },
});