从客户端,我通过ajax post收到一些数据。数据类型是json格式。
function sendProjectBaseInfo() {
prj = {
id : $('#id').val(),
email : $('#email').val(),
title : $('#title').val(),
}
$.ajax({
url: '/prj/',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: prj,
success: function(result) {
alert(result.Result)
}
});
}
获得json数据后,我尝试转换为json或dict格式。 要转换为json。我写的是这样的:
import json
def post(self, request):
if request.is_ajax():
if request.method == 'POST':
json_data = json.loads(request.data)
print('Raw Data : %s'%request.body)
return HttpResponse('OK!')
如果是上述情况,我得到500内部服务器错误。
所以我写下面的代码来解决这个错误。
import json
def post(self, request):
if request.is_ajax():
if request.method == 'POST':
data = json.dumps(request.data)
print('Raw Data : %s'%request.body)
return HttpResponse('OK!')
毕竟我得到了同样的错误。所以我查看了所要求的数据。
import json
def post(self, request):
if request.is_ajax():
if request.method == 'POST':
print('Raw Data : %s'%request.body)
return HttpResponse('OK!')
打印出来是:
Raw Data : b'{"id":"1","email":"jason@test.co","title":"TEST"}'
我如何克服这种情况?
答案 0 :(得分:2)
请求以字节(数据类型)的形式处理数据,因此首先我们需要将其转换为字符串格式,之后可以将其转换为 json格式。
import json
def post(self,request):
if request.is_ajax():
if request.method == 'POST':
json_data = json.loads(str(request.body, encoding='utf-8'))
print(json_data)
return HttpResponse('OK!')
答案 1 :(得分:0)
您必须获得TypeError: the JSON object must be str, not 'bytes'
例外。 (是Python3吗?)
如果是,那么
在json.loads
之前尝试此操作:.decode(encoding='UTF-8')
这是因为,如果在输出字符串的开头注意到小byte
,则响应正文为b
类型
if request.method == 'POST':
json_data = json.loads(request.body.decode(encoding='UTF-8'))
print('Raw Data : %s' % json_data)
return HttpResponse('OK!')
答案 2 :(得分:0)
$.ajax({
url: '/prj/',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: prj, #### YOUR ERROR IS HERE
success: function(result) {
alert(result.Result)
}
});
您需要将数据转换为js中的字符串。
在js代码中执行以下操作
data: JSON.stringify(prj)