2016-08-07 16 views
2

Ich stelle eine D3.JS-Visualisierung zusammen, als Teil davon habe ich eine MongoDB-Datenbank erstellt und über einen API-Endpunkt auf meinem Webservice verfügbar gemacht. Ich verwende Python Flask, um dies zu tun.Zugriff auf einen API-Endpunkt auf derselben Website mit D3.JS

Ich habe validiert, dass die ausgegebenen Daten im gültigen JSON-Format vorliegen, und ich habe darauf geachtet, den MIME-Typ auf application/json zu setzen. Während jedoch die URL in Frage alles zu besuchen ist in Ordnung, wenn ich versuche, in diese URL zu nennen d3.json mit:

d3.json("http://127.0.0.1:5000/citibike-api/bike-inbounds/id/72", function (data, error) { 
    if(error) throw error; 
    console.log(data); 
}); 

Konsole bei mir schreit:

uncaught exception: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] 

Gibt es noch andere Dinge, die ich brauche zu tun, damit diese Anfrage funktioniert?

Benötige ich etwas mit JSONP, um dies zu tun?

+0

Stringify die Ausnahme, so dass Sie wissen, was los ist. –

Antwort

2

Tauschen Sie data mit error. Statt:

d3.json("http://127.0.0.1:5000/citibike-api/bike-inbounds/id/72", function (data, error) { 
    if(error) throw error; 
    console.log(data); 
}); 

es sein sollte:

d3.json("http://127.0.0.1:5000/citibike-api/bike-inbounds/id/72", function (error, data) { 
    if(error) throw error; 
    console.log(data); 
}); 

Erklärung

Nach der API, in d3.json ...

... der Rückruf ist Wird mit zwei Argumenten aufgerufen: dem Fehler, falls vorhanden, und dem geparsten JSON

Das Argument error ist optional. Sie können einfach schreiben:

function (data){ 

Aber, wenn Sie das Argument error verwenden, die Sequenz zu sein hat:

function (error, data){ 
+1

Ugh. So ein einfacher Fehler! Was ist die Logik hinter dieser Argumentordnung? Ich habe noch nie zuvor Fehler gesehen. –

+1

Um meinen eigenen Kommentar zu beantworten: Ich glaube jetzt, dass dies so gemacht wird, dass "Fehler" immer ein vorhersagbar lokalisierbares Argument der Funktion ist, egal wie viele zusätzliche Argumente die Funktion, wie implementiert, akzeptiert. Sprachen, die Keyword-Deklarationen zulassen, vermeiden dieses Problem vollständig. –