【问题标题】:Handling a nested array in Flask request处理 Flask 请求中的嵌套数组
【发布时间】:2014-10-08 02:59:39
【问题描述】:

我在 Flask 中构建了一个网络服务器,并使用 jsonp 传递请求。我传入的其中一件事是嵌套数组,当我在 Flask 中检索数据时,数组完全混乱了。 这是我的代码

index.html

var array = [[2,1],[2,2],[2,3]]
function getNext() {
    var data = {
        'M': 5,
        'N': 5,
        'array' : array
    };
    $.ajax({
        url: '/getNewGeneration',
        jsonp: 'callback',
        dataType: 'jsonp',
        data: data,
        success: function(response) {
            ...
        }
    });
}

server.py

@app.route('/getNewGeneration')
def getNext():
    M = request.args.get('M')
    N = request.args.get('N')
    liveCells = request.args.get('liveCells')
    ...

当我打印出request.args 时,我得到ImmutableMultiDict([('callback', u'jQuery17101683842277548142_1412736365518'), ('array[2][]', u'2'), ('array[2][]', u'3'), ('array[1][]', u'2'), ('array[1][]', u'2'), ('N', u'5'), ('M', u'5'), ('_', u'1412736417145'), ('array[0][]', u'2'), ('array[0][]', u'1')])

有谁知道如何解决这个问题?

【问题讨论】:

  • request.json 也搞砸了吗?
  • request.json 返回无

标签: python ajax flask jsonp


【解决方案1】:

我发现您的代码存在两个问题。首先,您不传递名为'liveCells' 的密钥。你通过了一个名为'array' 的人。您需要在 JavaScript 或 Flask 端更新它。假设你想要前者,你的 JavaScript 应该是这样的

var array = [[2,1],[2,2],[2,3]]
function getNext() {
    var data = {
        'M': 5,
        'N': 5,
        'liveCells' : array
    };
    $.ajax({
        url: '/getNewGeneration',
        jsonp: 'callback',
        dataType: 'jsonp',
        data: data,
        success: function(response) {
            ...
        }
    });
}

其次,您不能使用get 方法来检索多阀键。 ImmutableMultiDicts,例如request.args,提供了一个名为getlist 的方法,它将返回给定键的项目列表,而不是单个值。将您的代码更新为

liveCells = request.args.getlist('liveCells')

更多信息可以在werkzeug documentation找到。

【讨论】:

  • 这是我在 SO 上找到的唯一一个提到有 getList 函数的答案,所以感谢您指出这一点。
【解决方案2】:

这样做,我认为它会为你工作。

$.ajax({
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify(data),
    dataType: 'json',
    url: 'getNewGeneration',
    success: function (e) {
        console.log(e);
    }
});

然后尝试打印request.json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多