在金字塔中:
class ProjectorViews(Layouts):
def __init__(self, request):
self.request = request
@view_config(renderer="json", name="updates.json", request_method="POST")
def updates_view(self):
print self.request.params
Run Code Online (Sandbox Code Playgroud)
JS:
$(function() {
function get_updates () {
data = JSON.stringify({'a':1});
$.post('/updates.json', data, function(res) {
});
}, 'json').done(function() {
});
}
get_updates();
});
Run Code Online (Sandbox Code Playgroud)
控制台显示self.request.params退货NestedMultiDict([('{"a":1}', u'')])
如何获取NestedMultiDict对象中的键和值?
如果我这样做self.request.params.getall("a"),它报告
KeyError: "Key not found: 'a'"
Run Code Online (Sandbox Code Playgroud)
如果我这样做self.request.json_body,它会报告
ValueError: No JSON object could be decoded
Run Code Online (Sandbox Code Playgroud)
$.post()始终发送application/x-www-form-urlencoded内容类型的数据.使用$.ajax()与正确的内容类型发送数据:
$.ajax({
url: url,
type: "POST",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done(...);
Run Code Online (Sandbox Code Playgroud)
在金字塔方面request.json_body是正确的访问方式......好吧,请求的JSON正文.