2013-07-18 8 views
5

Używam struktury REST Django do zasilania interfejsu API i wysyłania do niego żądania Ajax za pomocą jQuery.Wysyłanie żądania jQuery do Django REST Framework Wyniki w nie znalezionym błędzie obiektu JSON

Poniższy cURL działa dobrze:

curl -X POST -d '{"timeLogMins": 30, "personid": 3, "projectid": 8, "timeLogStart_dtm": "2013-07-18"}' -H "Content-Type: application/json" -u user:password http://localhost:8000/api/timelogests/ 

jednak kiedy zrobić wywołanie ajax jQuery, Dostaję błąd

$.ajax({ 
    url: update_url2, 
    contentType:"application/json", 
    headers: { 
     "Authorization": "Basic " + window.btoa("user:password"), 
    }, 
    dataType: "json", 
    data: { 
      "timeLogMins":30, 
      "personid":personid, 
      "projectid":projectid, 
      "timeLogStart_dtm":start_date 
      }, 
    type: 'POST', 

}).error(function(r){ console.log(r) }) 
.success(function(r){ console.log("success", r) }) 

Ustawianie nagłówek działa dobrze, ale dane wydaje się powrót:

"{"detail": "JSON parse error - No JSON object could be decoded"}" 

zacząłem pracować z REST ram wczoraj, więc jeszcze całkiem nowy do niego. Czy istnieje sposób, w jaki mogę przechwycić nagłówek żądania i sprawdzić, czy JSON? Obiekt żądania REST Framework nie jest zbyt widoczny.

+1

Okazuje się, że przekształcenie danych wysłanych w rzeczywisty ciąg spowoduje, że JSON będzie odczytywalny przez framework. Zgodnie z dokumentacją jQuery powinno to nastąpić w dowolny sposób, ale wydaje się, że złamał ten konkretny obiekt danych. To rozwiązuje mój problem, ale nie jestem pewien, co jest nie tak. Jeśli uda mi się to rozgryźć, opublikuję to jako odpowiedź. – Simon

+0

Wygląda na to, że dane Jsona nie zostały poprawnie utworzone. Czy możesz spróbować z twardą wartością kodu, taką jak {"timeLogMins": 30, "personid": 3, "projectid": 8, "timeLogStart_dtm": "2013-07- 18 "} –

+0

@AnshJ Tak, zobacz mój poprzedni komentarz. Ostatecznie to właśnie zrobiłem, wysyłając ciąg zamiast obiektu, nie odpowiedziałem jeszcze na to pytanie, ponieważ nie jestem pewien, dlaczego jQuery nie przetwarza obiektu danych, tak jak powinien. Zgaduję, że był to prawdopodobnie problem z formatowaniem "daty". – Simon

Odpowiedz

5

Okazuje się, że przekształcenie danych wysłanych w rzeczywisty ciąg spowoduje, że JSON będzie odczytywalny przez framework. Zgodnie z dokumentacją jQuery powinno to nastąpić w dowolny sposób, ale wydaje się, że złamał ten konkretny obiekt danych. To rozwiązuje mój problem, ale nie jestem pewien, co jest nie tak.

Powiązane problemy