Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用flask将javascript数组传递给python脚本[使用flask示例]_Javascript_Python_Ajax_Arrays_Flask - Fatal编程技术网

如何使用flask将javascript数组传递给python脚本[使用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

我正在努力使我的具体案件的工作,但我来短每一次。我知道这类问题已经被问过好几次了,但答案对我没有帮助(是的,我是新手)

该示例将字符串从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 %}
$(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[])
我已经回答了同样的问题