【问题标题】:flask receive var from jquery [duplicate]烧瓶从jquery接收var [重复]
【发布时间】:2017-05-12 21:51:09
【问题描述】:

我觉得这是非常基本的东西,听起来应该是这样。但是我在网上的任何地方都找不到这个。设置很简单: 我有一个变量foo = 1,现在我要做的就是将它发送到我的app.py。我知道我需要 AJAX,所以我也有它。目前我认为我需要做的是这样的事情:

js

$(function() {
        $('#btn').click(function() {
            var answer = 1
        $.ajax({
            url: '/checkAnswer',
            data: answer,
            type: 'GET',
            success: function(data) {
                console.log(data);
            },
            error: function(error) {
                console.log(error);
            }
        });
        });
        });

py

@app.route('/checkAnswer', methods=['GET', 'POST'])
def checkAnswer():
    try:
        answer = request.data
        if answer == 1:
            return 'ham'
        else:
            return answer

    except Exception as e:
        return 'foo bar'

【问题讨论】:

    标签: jquery ajax flask


    【解决方案1】:

    在传输数据时,最好使用POST 而不是GET。此外,donefail promises 通常比回调更清晰、更有用。

    js:

    $(function() {
        $('#btn').click(function() {
            var answer = 1
            $.ajax({
                url: '/checkAnswer',
                data: {
                    answer: answer
                },
                type: 'POST'
            }).done(function(data) {
                console.log(data);
            }).fail(function(error) {
                console.log(error);
        });
    });
    

    py:

    @app.route('/checkAnswer', methods=['POST'])
    def checkAnswer():
        try:
            answer = request.form['answer'] if 'answer' in request.form else None
            if answer == 1:
                return 'ham'
            else:
                return answer
    
        except Exception as e:
            return 'foo bar'
    

    request.form['answer'] 行是最好的情况。但是,在过去使用ajax 发布数据时,我必须这样做才能获取数据:

    answer = request.form.getlist('answer')[0]
    

    因此,我建议发送 JSON:

    js:

    $(function() {
        $('#btn').click(function() {
            var answer = 1
            $.ajax({
                url: '/checkAnswer',
                data: JSON.stringify({'answer': answer}),
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
            }).done(function(data) {
                console.log(data);
            }).fail(function(error) {
                console.log(error);
        });
    });
    

    py:

    @app.route('/checkAnswer', methods=['POST'])
    def checkAnswer():
        data = request.get_json()
        if data is None:
            return 'foo bar'
        answer = data['answer'] if 'answer' in data else None
        if answer == 1:
            return 'ham'
        else:
            return answer
    

    注意:设置ajax请求中的内容类型很重要,好像没设置一样,request.get_json()returns None

    【讨论】:

    • 帮我搞定了,非常感谢您的帮助。
    猜你喜欢
    • 2021-03-27
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2018-02-19
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多