62

jqueryajaxからデータをPOSTするのに問題があります。

$('#clickme').click( function() {
    var data = save_input(); // data

    data['_sid'] = $survey_id;  // survey_id injected from flask
    data['_uip'] = $user_ip; // user_ip injected from flask, request.remote_addr

    $.ajax({
        type : "POST",
        url : "{{ url_for('mod.load_ajax') }}",
        data: JSON.stringify(data),
        contentType: 'application/json;charset=UTF-8',
        success: function(result) {
            console.log(result);
        }
    });

    console.log(data);
});

コードから、のdataようなjavascriptオブジェクトです

{
    'foo' : 'foo',
    'bar' : 'bar',
    'fo_' : 42,
}

私がフラスコでやろうとしていることは:

@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
    if request.method == "POST":
        # load _sid and _uip from posted JSON and save other data
        # but request.form is empty.
        # >>> request.form
        # ImmutableMultiDict([]) 
        return str(request.form)

を参照してください。ajaxリクエストは行われますが、データは送信されません。私はconsole.log(data)ajaxを使用しているのでdata、jqueryの変数に意味のあるデータがあることがわかります。ただし、ajaxビューのrequest.formは空です。私のデータはどこに提出されますか?

4

5 に答える 5

72

試す

 $.ajax({
    type : "POST",
    url : "{{ url_for('mod.load_ajax') }}",
    data: JSON.stringify(data, null, '\t'),
    contentType: 'application/json;charset=UTF-8',
    success: function(result) {
        console.log(result);
    }
});

次に、サーバーから、次のようにデータ内の変数を参照できます。

request.json['foo']

application/jsonデータが入っているときにコンテンツタイプが指定されているためrequest.json

于 2013-06-13T08:20:59.223 に答える
13

あなたの例のように、キーと値のペアを送信するのではなく、jQueryデータオプションにJSON文字列を割り当てます。コメントで述べたように、JSONを文字列化する必要があります。キー(フラスコからJSON文字列にアクセスするために使用されます)を使用してオブジェクトを作成し、それをjQueryデータキーに割り当てます。

    $.ajax({
            type : "POST",
            url : "{{ url_for('mod.load_ajax') }}",
            data: {json_str: JSON.stringify(data)},
            contentType: 'application/json;charset=UTF-8',
            success: function(result) {
                console.log(result);
            }
        });

    @mod.route('/load_ajax', methods=["GET", "POST"])
    def load_ajax():
        if request.method == "POST":
            # load _sid and _uip from posted JSON and save other data
            # but request.form is empty.
            # >>> request.form
            # ImmutableMultiDict([]) 
            return str(request.form['json_str']
     )
于 2013-02-16T09:49:32.837 に答える
2

フラスコ側では、以下を使用します。

data = request.get_json()

変数データには、ajaxを使用して送信した辞書が含まれ、Pythonで操作できるようになりました。

于 2018-07-04T21:38:56.770 に答える
1

contentTypeを削除してみましたか?Flaskにデータを投稿するとします。

次のような偽のデータを追加してみてください

data:{"hello": "world"} ajax内?helloworldがrequest.formに到着するかどうかを確認するだけです

于 2013-02-17T03:12:57.583 に答える
0

Ajaxからデータを取得する(Flask)

HTML:

<input type="text" id="inputbox" autocomplete="off">

Js:

    $(document).ready(function(){
        $("#inputbox").on("input",function(e){
            inputbox = $("#inputbox").val();
            console.log(inputbox)
            $.ajax({
                method: "post",
                url: "/path",
                data: {inputbox},
                success:function(res){


                }
            })
        });
    });

.py:

search_value = request.form.get("text")
于 2021-07-27T14:31:41.270 に答える