从 Ajax 发送到 Django REST 框架时"JSON parse error"



我正在尝试向我的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来访问数据。

相关内容

最新更新