如何使用flask将javascript数组传递给python脚本[使用flask示例]
我正在努力使我的具体案件的工作,但我来短每一次。我知道这类问题已经被问过好几次了,但答案对我没有帮助(是的,我是新手) 该示例将字符串从javascript传递到python。我想传递一个数组。网络表明这是可能的。以下是我所拥有的: HTML/Flask模板:如何使用flask将javascript数组传递给python脚本[使用flask示例],javascript,python,ajax,arrays,flask,Javascript,Python,Ajax,Arrays,Flask,我正在努力使我的具体案件的工作,但我来短每一次。我知道这类问题已经被问过好几次了,但答案对我没有帮助(是的,我是新手) 该示例将字符串从javascript传递到python。我想传递一个数组。网络表明这是可能的。以下是我所拥有的: HTML/Flask模板: {% extends "layout.html" %} {% block title %}Test{% endblock %} {% block content %} <div> <h1>Fla
{% 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 %}
$(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;
});
});
@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
Python:
{% 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 %}
$(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;
});
});
@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网站,它们对我没有帮助:
(非常详细的回答,但无法实现)
下面是将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)
据我所知,字符串是将数组从客户端传递到服务器的唯一方法。也可以,但需要从中提取。另一方面,将不需要
json.loads
。令人惊讶的是,添加json.loads
这样的小差异可以对代码产生多大的影响。我已经怀疑只有字符串可以被传递,但这使得这个版本不那么痛苦;)。Thx@Thomas NI认为肖恩的答案是最清晰的。无需手动序列化/反序列化。让我们来处理这项工作。肖恩的答案对我来说很有用,使用request.form.getlist('wordlist[])
我已经回答了同样的问题