【问题标题】:"JSON parse error" when sending from Ajax to Django REST Framework从 Ajax 发送到 Django REST Framework 时出现“JSON 解析错误”
【发布时间】:2018-03-18 14:51:04
【问题描述】:

我正在尝试将 JSON 发送到使用 Django Rest Framework 构建的我的 restapi,并且每当我发送此请求时我都会收到一条错误消息,因为其他 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)"}

【问题讨论】:

  • 你有没有试过不对createJson函数中的数据进行字符串化?
  • 是的,我做到了。相同的错误信息。我什至尝试不将 processData 设置为 false,但没有更改。

标签: javascript jquery json django-rest-framework


【解决方案1】:

您应该能够通过访问request.data 来访问数据。

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 2019-05-08
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2016-01-06
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多