在金字塔:
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
JS :
$(function() {
function get_updates () {
data = JSON.stringify({'a':1});
$.post('/updates.json', data, function(res) {
});
}, 'json').done(function() {
});
}
get_updates();
});
控制台显示self.request.params
返回NestedMultiDict([('{"a":1}', u'')])
如何获取 NestedMultiDict 对象中的键和值?
如果我self.request.params.getall("a")
,则报告
KeyError: "Key not found: 'a'"
如果我self.request.json_body
,则会报告
ValueError: No JSON object could be decoded
答案 0 :(得分:6)
$.post()
始终以application/x-www-form-urlencoded
内容类型发送数据。使用$.ajax()
发送包含正确内容类型的数据:
$.ajax({
url: url,
type: "POST",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done(...);
在Pyramid端request.json_body
是访问的正确方法......好吧,请求的JSON正文。