如何通过Flask将JavaScript数组传递给Python脚本【使用Flask示例】

9 投票
1 回答
12639 浏览
提问于 2025-04-18 08:01

我正在尝试让这个 flask/jquery/ajax 示例 在我的特定情况下正常工作,但每次都遇到问题。我知道这种问题已经被问过很多次了,但那些回答对我没有帮助(是的,我是新手)。

这个示例是将一个字符串从JavaScript传递到Python。我想传递一个数组。网上说这是可能的。以下是我现在的代码:

HTML/Flask 模板:

{% extends "layout.html" %}
{% block title %}Test{% endblock %}
{% block content %}
    <div>
      <h1>Flask Jquery Test</h1>
      <div>
        <input type="button" value="Transfer" id="button" />
      </div>
      <div>
        Wordlist<br />
        <select multiple="multiple" id="wordlist" size="5">
            <option>Volvo</option>
            <option>Audi</option>
            <option>BMW</option>
            <option>Mercedes</option>
            <option>Toyota</option>
        </select>
        <span id="result"></span>
      </div>
    </div>
{% endblock %}

JS 脚本:

$(document).ready(function() {
    $("#button").bind('click', function(){
        //Get all words from list
        var list = [];
        $("#wordlist option").each(function(){
            list.push($(this).val());
        });
        //var list = $( "#wordlist option" ).val();
        console.log(list);
        $.getJSON($SCRIPT_ROOT + '/_array2python', {
            wordlist: list.toString()
        }, function(data){
            console.log(data.result)
            $( "#result" ).text(data.result);
        });
        return false;
    });
});

Python:

@app.route('/')
def start_page():
    return render_template('index.html')

@app.route('/_array2python')
def array2python():
    wordlist = request.args.get('wordlist', [])
    return jsonify(result=wordlist)

@app.errorhandler(404)
def page_not_found(e):
    """Return a custom 404 error."""
    return 'Sorry, nothing at this URL.', 404

现在,当我将一个字符串传递给 list 变量时(例如 var list = $( "#wordlist option" ).val();),这段代码运行得很好。但是,当我尝试用数组时,它总是只传递一个空值(也就是 [])。

这是否意味着我只能将字符串传递给Python?我该如何将JavaScript数组传递给Python呢?

谢谢大家的帮助!

附言:也许值得一提的是,我正在使用谷歌应用引擎来托管这段代码。

=================================================================================

顺便说一下,这些是我尝试过的SO网站,但没有帮助:

将JavaScript数组传递给Flask(非常优秀且详细的回答,但我无法让它工作)

将数据从JavaScript传递到Flask

从html/js返回数据到Python

相关问题:

1 个回答

15

这里有另一种将JavaScript数组传递给Python的方法:

JavaScript部分:

$.getJSON($SCRIPT_ROOT + '/_array2python', {
        wordlist: JSON.stringify(list)
    }, function(data){
        console.log(data.result)
        $( "#result" ).text(data.result);
    });

Python部分:

import json

@app.route('/_array2python')
def array2python():
    wordlist = json.loads(request.args.get('wordlist'))
    # do some stuff
    return jsonify(result=wordlist)

据我所知,字符串是从客户端传递数组到服务器的唯一方法。

撰写回答