Подтвердить что ты не робот

$.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", но не работает.

4b9b3361

Ответ 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);