2014-01-08 9 views
6

Ich lerne gerade d3, und ich versuche, Daten aus einer CSV-Datei zu importieren, aber ich bekomme immer den Fehler "XMLHttpRequest kann Datei nicht laden: /// Benutzer/Laura/Desktop/SampleECG.csv Cross-Ursprungsanforderungen werden nur für HTTP unterstützt. ". Ich habe gesucht, wie dieser Fehler behoben werden kann, und habe es auf einem lokalen Webserver ausgeführt, aber ich habe keine Lösung gefunden, die für d3.v2.js funktioniert. Hier ist ein Beispiel des Codes:Kann nicht Daten aus CSV-Datei importieren in d3

var Time = [] 
    ECG1 = [] 

d3.csv("/Desktop/d3Project/Sample.csv", function(data) 
     { 
     Time = data.map(function(d) {return [+d["Time"]];}); 
     ECG1 = data.map(function(d) {return [+d["ECG1"]];}); 
     console.log(Time) 
     console.log(ECG1) 
     }); 

Jede Hilfe wird sehr geschätzt.

+1

Sind Sie einen lokalen Webserver ausgeführt? Siehe z.B. [dieses Tutorial] (http://alignedleft.com/tutorials/d3/setup). –

+0

Welche Probleme haben Sie beim lokalen Webserver festgestellt? Ajax-Anfragen funktionieren nicht mit dem 'file:' Protokoll, also ist ein Webserver (ob lokal oder nicht) erforderlich. Im Idealfall würde sowohl das Skript als auch die CSV-Datei vom selben Server aus laufen. – nullability

+0

Ich habe das gleiche Problem konfrontiert. check hast du den richtigen Dateipfad angegeben? und um Datei zu öffnen: ///, Sie sollten die Anfrage über den lokalen Server durchführen. Versuchen Sie zuerst mit Firefox zu öffnen. da es die Anforderungsausnahme behandelt. Und bitte geben Sie so viele Informationen wie möglich (d. H. Ihre Konsolenprotokolle und weitere Informationen) an. – divakar

Antwort

15

Das verwirrte mich auch (ich bin auch ein d3 Anfänger).

Aus irgendeinem Grund sind Webbrowser nicht glücklich über das Laden von lokalen Daten, wahrscheinlich aus Sicherheitsgründen oder so. Wie auch immer, um dies zu umgehen, müssen Sie einen lokalen Webserver betreiben. Das ist einfach.

In Ihrem Terminal nach cd Ihrer Website Document-Root (dank @daixtr) -ing zu geben:

python -m SimpleHTTPServer 8888 & 

Okay, jetzt solange die Terminal-Fenster geöffnet sind und läuft, die lokale Web 8888 Server wird ausgeführt.

Also in meinem Fall, die ursprünglich die Web-Seite, die ich auf arbeitete wurde

genannt
file://localhost/Users/hills/Desktop/website/visualizing-us-bls-data-inflation-and-prices.html 

Als ich es in Chrom geöffnet. Um meine Seite auf meinem lokalen Webserver zu öffnen, tippte ich nur (in der Chrom-Suchleiste):

http://localhost:8888/Desktop/website/visualizing-us-bls-data-inflation-and-prices.html 

Nun sollte in CSVs Lesen arbeiten. Seltsam, ich weiß.

+0

Ich habe dies versucht und am Ende bekommen diesen Fehler in der Konsole: XMLHttpRequest kann nicht laden http: // localhost: 8888/test.csv. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Origin 'null' ist daher nicht erlaubt. Bist du auch hier reingerannt? –

+0

Hatte das gleiche Problem wie Ihr Kommentar, fordern Sie einfach die HTML-Seite auf die gleiche Weise wie die '.csv' an, so dass sie denselben Ursprung haben. Anstatt die '.html' aus der Datei im Windows Explorer zu öffnen, fordern Sie sie im Browser an:' http: // localhost: 8888/Desktop/website/mypage.html' –

5

Wenn Sie den integrierten Python-Webserver verwenden und weiterhin Probleme auftreten, führen Sie REMEMBER durch und stellen Sie sicher, dass Sie den Aufruf "python -m SimpleHTTPServer 8888" im richtigen Pfad ausführen, den Sie als DocumentRoot betrachten. Das heißt, Sie können 'python -m SimpleHTTPServer 8888' nicht einfach überall ausführen. Sie müssen tatsächlich 'cd/to/correct/path /' mit Ihrer index.html oder data.tsv und dann von dort 'python -m SimpleHTTPServer 8888' ausführen.

+0

Das ist ein toller Punkt. Ich habe es der Hauptantwort hinzugefügt, damit die Leute sehen. –

0

Verwenden Sie Firefox, idk was Chrome versucht zu erreichen