如何使用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?