首页 > 解决方案 > 为什么只有使用 jQuery 创建的列表中的第一项通过 Ajax 发送

问题描述

我有一个使用 jQuery 创建的列表,如下所示:

        pros=[];
        cons=[];
        $.each($(".pro-item"), function(){
            pros.push($(this).html())
        })
        $.each($(".con-item"), function(){
            cons.push($(this).html())
        })

现在我想将它传递给服务器进行处理,所以我使用 Ajax:

$.ajax({
        data: {
            pros: pros,
            cons: cons,
        },
        type: 'POST',
        dataType: "json",
        traditional: true,
        url: '/pro_con_list',
        success: function(data){
            console.log("Ajax call successful")
        }
})

但是当 server(flask/python) 收到它并且我打印结果数据时:

pros = request.form.get("pros")
print(pros)
print(request.form.get("cons"))

它只打印发送的 JS 列表的第一项。我 console.log 列出了优点和缺点列表,它显示了完整的列表:

(3) ["foo", "foo bar", "foo bar buz"]
(3) ["buz", "buz bar", "buz bar foo"]

这就是 python 打印它收到的内容:

foo
buz

我假设我没有正确发送列表,但似乎是唯一的工作方式而不是打印无。

标签: pythonjqueryajaxflask

解决方案


尝试request.form.getlist("pros")

要从文档中梳理出这一点,请从https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request.form开始并深入ImmutableMultiDictMultiDict,这是大多数form响应方法的地方记录在案。


推荐阅读