2016-05-22 7 views
0

Hintergrund:Cross-Domain-Anfragen - Javascript

Ich bin ein Web-App-Erstellung Preise zum Herunterladen und Display-Gehäuse. Datenquelle: http://www.fhfa.gov/DataTools/Downloads/Documents/HPI/HPI_AT_metro.csv

Mein Plan:

Laden Sie die Daten direkt über den Link mit Javascript und schalten Sie die Daten in ein Javascript-Objekt (möglicherweise jQuery-csv verwenden). Danach würde ich DataTables oder eine andere Javascript-Bibliothek verwenden, um die Daten anzuzeigen.

Wo ich stecken geblieben:

Nach einigen Recherchen, scheint es, dies zu tun, die "Same Origin Policy" verstößt. Nach dem, was ich gelesen habe, ist es nicht akzeptabel, Daten von externen Quellen in Javascript herunterzuladen.

Fragen:

  1. Bin ich richtig? Wird durch das Herunterladen einer CSV-Datei von einer externen Datenquelle die "Richtlinie für denselben Ursprung" verletzt?
  2. Wenn ich nicht richtig bin, wären die Code-Teile, die benötigt werden, um die .csv vom obigen Link herunterzuladen und in ein Javascript-Objekt (vorzugsweise mit jQuery) zu konvertieren, sehr hilfreich.
  3. Wenn ich richtig bin, warum ist das Herunterladen einer externen CSV-Datei ein Verstoß gegen diese Richtlinie, während die Verwendung eines externen Bilds zur Verwendung in einer Website keine Verletzung dieser Richtlinie darstellt? Z.B.

<img src="http://www.freeflashgamearcade.com/games/images/tic-tac-toe.jpg">

http://www.freeflashgamearcade.com/games/images/tic-tac-toe.jpg

Hinweise:

Ich hoffe, es so zu tun, so kann ich mit einer Server-Seite Sprache vollständig vermeiden. Wenn dies nicht funktioniert, plane ich die App mit Python/Flask, die nur zum Herunterladen der Daten verwendet werden würde.

+0

herunterladen Es ist nicht möglich, eine Datei über eine AJAX-Anfrage herunterzuladen, daher sehe ich nicht, dass das, was du beschreibst, die SOP verletzen würde. Allerdings sehe ich auch nicht, wie dies funktionieren könnte, wenn Sie die Datei auf den Client-Computer herunterladen, damit sie für Ihren JS-Code nicht zugänglich ist. –

+0

@RoryMcCrossan nicht mehr wirklich zum Download. zum Beispiel '' Download-Attribut, 'FileSaver' API usw. – charlietfl

+1

Kann Proxy auf Ihrem eigenen Server verwenden, um die Daten abzurufen, dann Ajax zu Ihrem Proxy. Oder verwenden Sie einen Proxy-Service eines Drittanbieters wie YQL – charlietfl

Antwort

1

Es gibt ein paar Probleme mit dem Projekt, das Sie erreichen wollen:

  1. Sie können eine AJAX-Anforderung verwenden, um eine dritte Partei-Datei herunterladen oder Daten abrufen, weil der CORS Politik. Manchmal erlaubt es eine Website, ihre Ressourcen zu teilen, und in diesem Fall ist es möglich, Daten von Drittanbietern über AJAX zu erhalten. (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)

  2. Selbst wenn Sie die CSV-Datei herunterladen könnten, müssten Sie sie analysieren, um die Daten anzuzeigen, und da Sie JavaScript verwenden, werden Sie es auf dem Client-Computer herunterladen und dann müssen Sie darauf zugreifen, was nicht möglich ist.(Sie können nicht System zugreifen, um Dateien aus dem Javascript [mehr Details finden Sie hier: Local file access with javascript)

1

Sie können eine Ajax-Anforderung tun, um eine andere Quelle, die nicht dem Server ist, weil dies verstößt gegen die Querursprungsanforderung Politik der Browser.

Sie können zwei Dinge tun. Verwenden Sie die Python-Lösung und aktivieren Sie CORS, um die Ajax-Anfrage ohne Browser-Richtlinienproblem durchzuführen. weil Sie es Ihrem Server ermöglichen, diese Art von Anfrage zu akzeptieren. und dann bekommen die Ajax-Anforderung wie folgt

$.ajax({ 
    type: "get", 
    url: "mypythonresource.com/Documents/HPI/HPI_AT_metro.csv" 
    success: function(response){ 
    // response will be a string that cointains the CSV data separed by ';' 
    } 
}); 

oder die andere Sache, die Sie tun können, ist ein Tag machen und nachdem die Benutzer die Ressource zeigen sie eine modale Fenster für die Wieder sendet Ihre Anwendung