如何通过Flask将JavaScript数组传递给Python脚本【使用Flask示例】
我正在尝试让这个 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(非常优秀且详细的回答,但我无法让它工作)
相关问题:
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)
据我所知,字符串是从客户端传递数组到服务器的唯一方法。