【问题标题】:Pass Javascript array with Jquery and JSON from client-side to server side in Flask在 Flask 中将带有 Jquery 和 JSON 的 Javascript 数组从客户端传递到服务器端
【发布时间】:2020-05-16 17:50:54
【问题描述】:

我正在尝试将 Javascript 数组从客户端传递到服务器端(Flask)。我的代码似乎适用于整数和字符串。当我尝试使用完全相同的代码发送数组时,我得到None

服务器端代码:

@app.route("/route1", methods=['GET', 'POST'])
def route1():

    a = request.args.get('post')
    result = json.dumps(a)
    print(a)
    print(result)

客户端:

$SCRIPT_ROOT = {{ request.script_root | tojson | safe }};

var x = ["test", "test2"];

function newFunction() {

    console.log(x)
    $.getJSON($SCRIPT_ROOT + '/route1', { post: x },
        function (data) {
            var response = data.result;
            console.log(response);
        }

    )
};

正如我之前所说,当x 被简单地分配一个字符串或一个整数时,这似乎工作得很好。当试图通过这个数组时,我的两个打印语句分别得到NoneNULL。如何正确地通过数组到服务器端?

【问题讨论】:

    标签: javascript python jquery json flask


    【解决方案1】:

    是的,我也无法使用 $.getJSON 让它工作......

    这是一个经过测试的$.ajax 解决方案:

        <script>
        $SCRIPT_ROOT = {{ request.script_root | tojson | safe }};
        var x = ["test", "test2"];
            function f1(){
                $.ajax({
                    type: "POST",
                    url: $SCRIPT_ROOT + "/route1",
                    contentType: "application/json",
                    dataType: "JSON",
                    data: JSON.stringify(x)
                });
            };
        </script>
    

    我用这样的按钮触发它:

        <button id="testing" name="testing" onclick="f1();">testing</button>
    

    还有 Flask 代码:

    @bp.route("/route1", methods=['GET', 'POST'])
    def route1():
        a = request.get_json()
        print(a)
        return "hello, world"
    

    【讨论】:

    • 这看起来不错,但由于某种原因似乎什么也没发生。我认为该功能没有被触发。按钮是否需要成为特定表单组的一部分?
    • 我没有将按钮放在表单组中,它是完全独立的。我很快就要睡觉了,但我明天再回来看看是否能提供进一步的帮助。
    • 我可以像使用原始代码那样以典型方式命名函数并触发函数吗?不幸的是,我对 Jquery 并不熟悉,但它在执行功能方面似乎更加复杂。
    • @find_all:我将其更改为使用纯 Javascript。告诉我进展如何。
    • 感谢您的帮助。不幸的是,现在我收到了ValueError: too many values to unpack (expected 2)。如果您没有时间再帮助我,那也没关系,我会提取从 getlist 和 regex/tokenize 获得的杂乱数据。除非您对此错误有所了解,否则这似乎是我目前唯一的选择。
    【解决方案2】:

    你可以试试下面的代码。它会起作用的。当您将数组作为参数传递时。因为 request.args 是一个 MultiDict 实例

    request.args.getlist(Key)
    

    或者您应该尝试将您的 Array 转换为 Json 并将 json 传递给 Server。 您可以使用下面的方法来转换 json

    JSON.stringify()
    

    你可以使用的服务器端

    data = request.get_json()
    

    【讨论】:

    • 这给了我一个空列表 [] 而不是 None
    • 你可以参考下面的链接stackoverflow.com/a/23889195/1079086
    • 我能够让它工作,所以我会支持你。不幸的是,它仍然非常奇怪地通过了,我得到了['["test","test3"]']。你知道为什么它会出现在这样的嵌入式列表中吗?
    • 你在尝试request.args.getlist("post[]") 吗?
    • 是的,我试过了,但我得到了一个空列表。显然我需要使用 AJAX,并试图弄清楚如何将它应用到我当前的代码中。会不会是$.ajax.getJSON
    猜你喜欢
    • 2016-03-16
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2018-06-18
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多