我在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')])
有谁知道如何解决这个问题?
答案 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
方法检索多种关键字。 ImmutableMultiDict
等request.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
。