0

json をフラスコ サーバーに投稿しようとしていますが、投稿リクエストは常に失敗します。これは私がやっている方法ですが、何が間違っているのでしょうか?

jQuery.ajax({
    url:'/someLink',
    method:'POST',
    data:JSON.stringify({"sampleKey":"Value"}),
    success:function(data){
        console.log(data);
    },
});

そして、私のフラスコサーバーは次のようになります

@app.route('/someLink', methods=['POST'])
def someFn():
 sampleKey = str(request.form['sampleKey'])

次のリクエストが機能するため、データのシリアル化に問題があると思います

jQuery.post('/someLink',{"sampleKey":"Value"},function(data){console.log(data)});
4

1 に答える 1

1

jQuery.ajaxは、プレーン オブジェクトまたはクエリ文字列をデータのパラメーターとして受け入れます。JSON でエンコードされた文字列は受け入れません。

デフォルトでデータを送信し'application/x-www-form-urlencoded; charset=UTF-8'ます。つまり、Ian が提案したようにこれを明示的にオーバーライドしない限り (そしてサーバーがそれを期待している場合)、JSON でエンコードされた文字列を渡すべきではありません。

これは、オブジェクトを渡すことで簡単に解決できます。

APIから

データ

タイプ: PlainObject または String

サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。GET リクエストの URL に追加されます。この自動処理を防ぐには、processData オプションを参照してください。オブジェクトはキーと値のペアである必要があります。value が配列の場合、jQuery は従来の設定 (以下で説明) の値に基づいて、同じキーで複数の値をシリアル化します。

試す

jQuery.ajax({
    url:'/someLink',
    method:'POST',
    data:{"sampleKey":"Value"},
    success:function(data){
        console.log(data);
    }
});
于 2013-05-23T05:25:52.150 に答える