web-dev-qa-db-ja.com

有効なjsonをリクエスト本文に投稿するjQuery

jQuery Ajax docs によると、リクエストを送信するときにクエリ文字列の形式でデータをシリアル化しますが、processData:falseを設定すると、実際のJSONを本文で送信できるようになります。残念ながら、これが発生していて、2番目にオブジェクトがどのように見えるかがサーバーに送信されている場合、最初に判断するのに苦労しています。私が知っているのは、サーバーが送信しているものを解析していないことだけです。

http client を使用してオブジェクトリテラル{someKey:'someData'}をポストすると、動作します。ただし、data: {someKey:'someData'}でjQueryを使用すると、失敗します。残念ながら、Safariでリクエストを分析すると、メッセージペイロードは[object Object] ...すばらしい...と言われ、Firefoxでは投稿は空白です...

Java側で本文の内容をログに記録するとき、文字通り[object Object]を取得するので、どのようにREAL JSONデータを送信しますか?

JQueryから送信されたリクエストを使用して、リクエスト本文のJSONデータをシリアル化するJavaサービスの経験がありますか?

ところで、ここに完全な$ .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'
});
154
brad

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

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

実際のJSON文字列を送信する場所。より一般的な解決策については、次のように JSON.stringify() を使用してオブジェクトをJSONにシリアル化します。

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

JSONオブジェクトを持たない古いブラウザーをサポートするには、 json2.js を使用して追加します。


現在起こっているのは、processData: falseを持っているからです。基本的には、これを送信しています:({"command":"on"}).toString()これは、[object Object]...リクエストに表示されるものです。

253
Nick Craver