我有以下
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>
或者甚至只需在浏览器中打开调试器,查看响应中返回的内容.