我有以下
jquery代码:
$.ajax({
type: 'POST',url: url,data: data,dataType: 'json',statusCode: {
200: function (data,textStatus,jqXHR) {
console.log(data);
},201: function (data,jqXHR) {
log(data);
},400: function(data,jqXHR) {
log(data);
},},});
当后端(金字塔)验证失败时,使用400.现在从金字塔我如何返回HTTPBadRequest()响应与包含验证错误的json数据?我尝试过如下:
response = HTTPBadRequest(body=str(error_dict))) response.content_type = 'application/json' return response
但是当我在firebug中检查它返回400(坏请求)这是很好,但它从来没有解析从上面的data.responseText的json响应.
解决方法
那么你应该可以从序列化error_dict开始使用一个json库.
import json out = json.dumps(error_dict)
鉴于您没有提供关于您的视图设置的任何上下文,我只能告诉您我将如何做:
@view_config(route_name='some_route',renderer='json')
def myview(request):
if #stuff fails to validate:
error_dict = # the dict
request.response.status = 400
return {'errors': error_dict}
return {
# valid data
}
如果你想自己创建回应,那么:
response = HTTPBadRequest() response.body = json.dumps(error_dict) response.content_type = 'application/json' return response
要调试该问题,请停止基于jQuery的工作原理,并自行查看请求以确定Pyramid是否正常运行,或者是否还有其他功能.
curl -i <url>
或者甚至只需在浏览器中打开调试器,查看响应中返回的内容.