如何在 Django 视图中使用 ajax POST 解析 json 数据
Posted
技术标签:
【中文标题】如何在 Django 视图中使用 ajax POST 解析 json 数据【英文标题】:how to parse json data with ajax POST in Django view 【发布时间】:2015-11-25 02:42:42 【问题描述】:我正在尝试在 django 视图中解析 json 数据。但是我遇到了问题。
我正在使用下面的代码 sn-p。
$(document).ready(function()
$("#mySelect").change(function()
selected = $("#mySelect option:selected").text()
$.ajax(
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
url: '/test/jsontest/',
data:
'fruit': selected,
,
success: function(result)
document.write(result)
);
);
);
当客户端用户更改值时,ajax 代码发送 json 数据。 但是服务器端视图以“fruit=apple”的形式接收数据。 我认为这不是 json 数据格式。所以,我不知道如何解析数据。
我尝试解析如下,但调用 json.dumps(data) 后出现 500 Internal server error
class JsonRead(View):
template_name = 'MW_Etc/jsonpost.html'
def get(self,request):
return render(request, self.template_name)
def post(self,request):
data = request.body
logger.debug('json data received(%s)' % data)
return HttpResponse(json.dumps(data), content_type='application/json')
【问题讨论】:
【参考方案1】:像这样发布 JSON 字符串。
data: 'data': JSON.stringify('fruit': selected)
并收到喜欢
data = json.loads(request.POST.get('data', ''))
【讨论】:
如果他去掉单引号如:data: fruit: selected
,他会成功做到fruit = json.loads(request.POST.get('fruit'))
【参考方案2】:
您需要将数据发布为 JSON 字符串而不是 javascript 对象。
data: JSON.stringify('fruit': selected)
应该这样做。另请注意,您需要 json.loads
Django 中的数据才能实际使用它。
【讨论】:
正如你提到的,我添加了 jsondata=json.loads(request.body)。但我收到 500 错误。 您是否也编辑了 JavaScript 客户端?尝试记录错误以查看问题所在 (try: ... except Exception, e: logger.exception(e)
)。
“JSON 对象必须是 str,而不是 'bytes'”导致的异常,我该如何解决?
我自己从未遇到过这种情况,但也许这会有所帮助:***.com/questions/25968752/…
json.loads(request.body.decode('utf-8')) 为我工作!!以上是关于如何在 Django 视图中使用 ajax POST 解析 json 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 视图中使用 ajax POST 解析 json 数据
如何从 Django 视图中获取价值到 Ajax 成功函数中