2015-06-12 6 views
6

Próbuję użyć interfejsu REST API Firebase, aby zapisać dane w moim magazynie danych. Próbowałem z jQuery i wanilią JS XHR. Oba jednak dają ten sam błąd. 403 Bad Request i ta odpowiedź:Żądanie POST interfejsu API żądania REST usługi Firebase kończy się błędem: "Niepoprawne dane, nie można przeanalizować obiektu, tablicy ani wartości obiektu JSON ..."

Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names.

Oto mój przykład JSON, próbuję zapisać:

{ 
    "date": "2pm", 
    "name": "John" 
} 

Oto przykład żądania ajax:

jQuery.ajax({ 
    accept: "application/json", 
    type: 'POST', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    url: "https://something.firebaseio.com/endpointnode.json", 
    data: { 
     "name": "John", 
     "date": "2pm"   
    }, 
}); 

Reakcja żądanie:

{ 
    "error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names." 
} 

Jak widać, nie ma żadnych specjalnych znaków ani nic. To powinno po prostu działać.

Działa dobrze z CURL i Httpie. Próbowałem sprawdzić opcję -v w Httpie po szczegóły. Umieściłem wszystkie nagłówki tak, jak robi to Httpie. Nic nie pomogło. Nawiasem mówiąc, moje środowisko jest zapisywalne, więc nie powinno być żadnych problemów z uprawnieniami.

Każdy pomysł, jak to osiągnąć?

Dzięki.

+0

edycji posta z odpowiedzią, to tak: '{ „błąd”:„Nieprawidłowy dane, nie można parsować obiektu JSON, tablicy ani wartości. Być może używasz nieprawidłowych znaków w nazwach kluczy. " } ' Ale w httpie, zwraca identyfikator utworzonego obiektu w Firebase stronie, która jest oczekiwana zachowanie: ' HTTP/1.1 200 OK Cache-Control: no-cache Content-Length: 31 Content- Wpisz: application/json; charset = utf-8 Strict-Transport-Security: max-age = 31556926; includeSubDomains; preload { "name": "-SomeRandomID" } ' – Hakan

Odpowiedz

9

Podano, że twoje żądanie AJAX zawiera ciąg znaków json, przypisując właściwość contentType. Jednak parametry dołączone do żądania nie są ciągami JSON. Aby utworzyć dane jako ciąg znaków json, wystarczy wywołać metodę JSON.stringify(params).

Poniższy fragment kodu może pomóc w rozwiązaniu problemu.

var data = {"name": "John", "date": "2pm"}; 
jQuery.ajax({ 
    accept: "application/json", 
    type: 'POST', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    url: "https://something.firebaseio.com/endpointnode.json", 
    data: JSON.stringify(data), 
}); 

Pozdrawiam.

+2

To dziękuję! – Hakan

+1

JSON.stringify uratowało mi życie –

2

Dane musi być ciąg, użyj JSON.stringify konwertować obiekt na ciąg:

data: JSON.stringify({"name": "John", "date": "2pm"})