在Flask请求中处理嵌套数组

时间:2014-10-08 02:59:39

标签: python ajax flask jsonp

我在Flask中构建了一个Web服务器,并且我使用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')])

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

2 个答案:

答案 0 :(得分:3)

我发现您的代码存在两个问题。首先,您不会传递名为'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方法检索多种关键字。 ImmutableMultiDictrequest.args提供了一种名为getlist的方法,该方法将返回给定键的项目列表,而不是单个值。将代码更新为

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

更多信息可在werkzeug documentation

中找到

答案 1 :(得分:0)

这样做,我认为它适合你。

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

然后尝试打印request.json