如何使用flask将javascript数组传递给python脚本[使用flask示例]

Posted

技术标签:

【中文标题】如何使用flask将javascript数组传递给python脚本[使用flask示例]【英文标题】:How to pass a javascript array to a python script using flask [using flask example] 【发布时间】:2014-07-19 21:45:22 【问题描述】:

我正在尝试让flask/jquery/ajax example 为我的具体情况工作,但我每次都做不到。我知道这种问题已经被问过好几次了,但答案对我没有帮助(是的,我是新手)。

该示例将字符串从 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

现在,当将字符串(例如 var list = $( "#wordlist option" ).val(); )传递给 list 变量时,此代码可以正常工作。但是,当尝试使用数组时,它只会传递备份值(即[])。

这是否意味着,我只能将字符串传递给 python?我如何最好地将 javascript 数组传递给 python?

感谢大家的帮助!

附:也许值得一提。我正在使用谷歌应用引擎来托管此代码。

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

仅供参考,这些是我尝试关注的 SO 网站,但它们对我没有帮助:

Passing Javascript Array to Flask(优秀且非常详细的答案,但无法正常工作)

Passing data from javascript into Flask

Return data from html/js to python

【问题讨论】:

我已经回答了同样的问题here 【参考方案1】:

这是将 JS 数组传递给 python 的另一种方法:

JS端:

$.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)

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

【讨论】:

$.post(endpoint, wordlist: list, null, 'json').then(successHandler) 也可以,但您需要从request.form.getlist('wordlist') 中提取。另一方面,则不需要json.loads 太棒了,像添加json.loads 这样的小差异可以对代码产生多大的影响。我已经怀疑只能传递字符串,但这使得版本减少了痛苦;)。谢谢@Thomas N 我认为肖恩的回答是最干净的。无需手动序列化/反序列化。让 Flask 来处理这项工作。 肖恩的回答对我有用request.form.getlist('wordlist[]')

以上是关于如何使用flask将javascript数组传递给python脚本[使用flask示例]的主要内容,如果未能解决你的问题,请参考以下文章

如何在模板中将数据从 Flask 传递到 JavaScript?

如何使用扩展语法将数组传递给 JavaScript 中的方法

如何使用 PHP 和 Ajax 将数组传递给 Javascript?

如何使用javascript将数组值传递给dojo饼图

如何将 Json 数据从 javaScript 发送到 Flask

如何使用javascript动态地将json数组传递给数据表