0

Flask で実行されている RESTful API に対して、タイプ 'GET' の jQuery の ajax 呼び出しを使用したいと考えています。私のリクエストでは、一部のデータを JSON として投稿したいと考えています。

私は POST リクエストに対してまったく同じことをしていますが、それらは魅力的に機能します。しかし、GET Flask を使用すると 400 エラーが発生し、さらに詳しく調べると、途中で JSON が部分的に URI エンコードされているようです ({%22email%22:%22some@email.com%22})。

私はajaxデータパラメータでjsonをJSON.stringifyingしているので、decodeURIComponentを使用しようとしましたが、違いはありません。

sessiontoken = "123abc";
jsonData = {"email": email};

$.ajax({
    type: 'GET',
    crossDomain: true,
    url: 'http://someserver/sessions/' + sessiontoken,
    dataType: 'json',
    processData: false, //added this to see if it helps, it didn't 
    contentType: "application/json",
    async: false,
    data: JSON.stringify(jsonData),
    success: function(data){
        //I'd be happy
    },
    error: function(data){
        //This is where I get as my backend throws a 400 on me due to the screwed up json
    }
});

地球上で同じ問題を抱えている人を見つけることができないので、それは私を夢中にさせています. 私は以前にリクエストを ajax してきましたが、過去にこのばかげたことに直面したことはありません。

編集: わかりました、目標をあきらめて、パラメーターをリクエスト本文に追加するのではなく、クエリ文字列として渡す必要があるようです。たとえば、ここで説明されているように、何も問題はないと思います: REST API のベストプラクティス: パラメータを配置する場所?

4

2 に答える 2

2

jsonDataクエリパラメーターとして追加したいと思われます。そうするために、それをエンコードする必要はありません。

$.ajax({
  ...
  data: jsonData,
  ...
 });

結果のURLは次のようになります

http://someserver/sessions/123abc?email=foo%40bar.com
于 2012-08-25T19:47:01.543 に答える
1

ajaxのGETリクエストに任意のデータを設定しようとすると、URL文字列のパラメータに変換されます。もちろん、" のような記号は %URL_CODE (すべてのコードを参照) として表され、次のようなクエリが取得されます。

http://someserver/sessions/sessiontoken?{%22email%22:%22some@email.com%22}

安らかなサービスを編成する最善の方法は、URI 部分の記述クエリです。json を URL パラメーターに入れ、サーバー側でシンボルの URL コードを解析する別の方法。

于 2012-08-25T19:46:23.040 に答える