$ .post () отправляет данные не как json, а как x-www-form-urlencoded - PullRequest
32 голосов
/ 03 апреля 2011

Это действительно странно.У меня несколько $.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 ]

37 голосов
/ 03 апреля 2011

Если вы хотите отправить данные как 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'
8 голосов
/ 03 апреля 2011

Потому что $. Post () для отправки запросов в форме. $. Ajax для отправки всего, что вы хотите.См. contentType на странице $.ajax для получения дополнительной информации.

Цитата:

При отправке данных на сервер используйте этот тип контента.По умолчанию используется «application / x-www-form-urlencoded», что подходит для большинства случаев.Если вы явно передадите тип содержимого в $ .ajax (), он всегда будет отправлен на сервер (даже если данные не отправляются).Данные всегда будут передаваться на сервер с использованием кодировки UTF-8;Вы должны декодировать это соответствующим образом на стороне сервера.

1 голос
/ 26 апреля 2018

у меня это тоже работает

$.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
  },
});
1 голос
/ 24 августа 2016

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

...