1. ホーム
  2. jquery

[解決済み】jQueryがリクエストボディに有効なjsonを投稿する。

2022-04-12 07:17:31

質問

ということで jQuery Ajax ドキュメント を設定すると、リクエストを送信するときにクエリ文字列の形式でデータをシリアライズします。 processData:false は、ボディに実際のJSONを送信できるようにする必要があります。 残念ながら、この現象が起こっているのかどうか、そしてサーバーに送信されるオブジェクトがどのようなものなのか、判断するのに苦労しています。 私が知っているのは、サーバーが私が送っているものをパースしていないということだけです。

を使用する場合 httpクライアント を投稿し、オブジェクトリテラル {someKey:'someData'} であれば、動作します。しかし、jQueryを data: {someKey:'someData'} と表示され、失敗します。 残念ながら、Safariでリクエストを分析すると、メッセージのペイロードが [object Object] ...素晴らしい...そしてFirefoxでは投稿が空白になっています...。

Java側で本文のログを取ると、文字通り [object Object] 本当のJSONデータを送るにはどうしたらいいのでしょうか?

jQueryから送信されたリクエストで、JavaサービスがリクエストボディでJSONデータをシリアライズした経験のある方はいらっしゃいますか?

ちなみに、$.ajaxリクエストの全文はこちらです。

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});

解決方法は?

実際のJSONリクエストは、次のようになります。

data: '{"command":"on"}',

実際のJSON文字列を送信しているところ。 より一般的な解決策としては JSON.stringify() のように、オブジェクトをJSONに直列化することができます。

data: JSON.stringify({ "command": "on" }),

を持たない古いブラウザに対応するため。 JSON オブジェクトを使用します。 json2.js で追加されます。


現在起こっていることは、あなたが processData: false は、基本的にこのように送信されます。 ({"command":"on"}).toString() というのは [object Object] ...あなたのリクエストに表示されているものです。