我正在尝试向我的restapi发送一个JSON,它是使用Django Rest Framework构建的,每当我发送此请求时,我都会收到一条错误消息,因为其他ajax调用具有相同的结构。无论我使用什么观点,我都得到了同样的错误。
我很确定问题出在 ajax 配置或创建 json 数据的 javascript 上,因为当我通过"高级 REST 客户端"甚至通过使用 Xamarin Forms 的应用程序构建发送 json 时,响应是 200。
function createJson( email, pass){
tmpObj = {"Email": email, "Pass": pass};
json_result = JSON.stringify(tmpObj);
return json_result;
}
function sendLogin(){
var jsonData = createJson(State.email, State.pass);
console.log(jsonData)
$.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json',
url: '/restapi/usuarios/login/',
data: jsonData,
processData: false ,
success: function(json) {
console.log(json);
State = json;
first_name = getFirstName(State.Nome)
title = "Login";
msg_html = "Bemvindo, <b>" + first_name + "</b>.";
modal = createModal(title, msg_html);
},
// handle a non-successful response
error : function(xhr,errmsg,err) {
var msg = "Oops! We have encountered an error: "+errmsg;
console.log(msg);
console.log(xhr.status + ": " + xhr.responseText);
setState({sent: 'error', result: err, email: ''});
}
});
}
在服务器端:
@api_view(['POST'])
def UsuarioLogin(request):
data = JSONParser().parse(request)
if all(credencial in data for credencial in ('Email', 'Pass')):
q = User.objects.filter(email=data['Email'])
if q.count() == 1:
username = q.get().username
password = data['Pass']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
usuario = q.get()
payload = UserSerializer(usuario, many=False)
return JsonResponse(payload.data, status=status.HTTP_200_OK, safe=False)
else:
return JsonResponse({"Mensagem": "Senha ou email incorretos"}, status=status.HTTP_401_UNAUTHORIZED, safe=False)
else:
return JsonResponse({"Mensagem": "Usuário não cadastrado"}, status=status.HTTP_404_NOT_FOUND, safe=False)
else:
return JsonResponse({"Mensagem": "Nem todos os campos foram informados"}, status=status.HTTP_400_BAD_REQUEST,
safe=False)
浏览器上的错误消息是:
400: {"detail":"JSON parse error - Expecting value: line 1 column 1 (char 0)"}
您应该能够通过访问request.data
来访问数据。