2017-10-06 88 views
0

我想发送一个JSON到我的restapi,使用Django Rest Framework进行构建,并且每当我发送此请求时都收到一条错误消息,因为其他ajax调用具有相同的结构。不管我接触什么样的观点,我都有同样的错误。当从Ajax发送到Django REST框架时发生“JSON解析错误”

我敢肯定,问题是Ajax的配置或创建JSON数据,因为当我使用Xamarin形式甚至可以通过一个应用程序构建发送至“高级REST客户端”或JSON,响应的JavaScript为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)"} 
+0

您是否尝试过不将createJson函数中的数据字符串化? – JosephC

+0

是的,我做过。相同的错误消息。我甚至试图不把processData设置为false,但没有改变。 –

回答

0

您应该只需访问request.data即可访问数据。