web-dev-qa-db-ja.com

$ .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」として強制しましたが、どちらも機能しません。

32
byte_slave

データを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'
39
James Kyburz

$。post() はフォームのようなリクエストを送信するためのものです。 $。ajax は、あなたが望むものを送るためのものです。詳細については、$.ajaxページのcontentTypeを参照してください。

見積もり:

サーバーにデータを送信するときは、このコンテンツタイプを使用します。デフォルトは「application/x-www-form-urlencoded」で、ほとんどの場合これで問題ありません。 content-typeを$ .ajax()に明示的に渡すと、(データが送信されない場合でも)常にサーバーに送信されます。データは常にUTF-8文字セットを使用してサーバーに送信されます。サーバー側でこれを適切にデコードする必要があります。

8
Olli

成功関数でデータをJSONに強制することもできます:data = JSON.parse(data);

1
obotezat

これも私のために働く

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