2016-04-11 10 views
0

Ich möchte eine JSON-Stringed-Datei in meinem Javascript laden. Das Javascript befindet sich in einer HTML-Datei, die ich von meinem lokalen Dateisystem geladen habe.Laden Sie eine 'serverseitige' Datei mit XMLHttpRequest in lokale HTML-Datei

Ich habe mit dem folgenden Code versucht:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', fileName, true); 
xhr.responseType = 'blob'; 

xhr.onload = function(e) { 
    if (this.status == 200) { 
    // get binary data as a response 
    var blob = this.response; 
    alert("Yo"); 
    } 
}; 

Aber das onload-Ereignis ausgelöst werden nur einmal, mit dem Status = 0, dann nicht mehr passiert.

Ich habe versucht, sowohl einen vollständigen Pfad zu der Datei als auch einen lokalen Dateipfad wie "/files/the_file.txt" zu verwenden.

Es sieht aus wie das Problem mit mir verwandt ist, versuchen, die HTML-Datei lokal auszuführen. Ich möchte keinen lokalen Server einrichten, wie ich in ähnlichen Beiträgen hier bei so vorgeschlagen habe.

Jemand da draußen mit einer Lösung für dieses Problem?

EDIT:

Das ist nicht das, was ich will, aber dies könnte dazu dienen, ein Beispiel zu geben, wie ich es fast will. In diesem Beispiel kann der Benutzer eine Datei auswählen und mein Skript kann nun auf den Inhalt der ausgewählten Datei zugreifen.

HTML:

<input type="file" id="FancyInputField" onchange="doIt();"> 

Javascript:

function doIt(){ 
    var selectedFile = document.getElementById('FancyInputField').files[0]; 

    reader = new FileReader(); 

    reader.onload = function (e) { 
     var output = reader.result;  
     var daObject = JSON.parse(output); 
    } 

    reader.readAsText(selectedFile); 
} 

Dies auch mit einer lokalen HTML-Datei funktioniert. (Kein lokaler Server)

Meine Frage steht; Wie lese ich die Datei (en) ohne Benutzerinteraktion? Die Dateien befinden sich in einem Unterordner, in dem sich die HTML-Datei befindet. Ich kann problemlos laden und ein Bild aus dem gleichen Unterordner anzeigen, mit einem Tag. .. Warum ist es so schwer eine Textdatei zu laden?

Antwort

2

Wie lese ich die Datei (en) ohne Benutzerinteraktion?

Sie können nicht. Diese Dateien gehören dem Benutzer, nicht Ihrer Website. Sie können nicht wählen, sie zu lesen.

Ich kann ohne Probleme laden und zeigen ein Bild aus dem gleichen Unterordner mit einem <img> Tag

Es gibt einen großen Unterschied zwischen einem Bild für den Benutzer, und macht die Inhalt einer Datei, die für JavaScript-Code verfügbar ist, der vom Autor der Seite geschrieben wurde.

Warum ist es so schwierig, eine Textdatei zu laden?

  1. Schicken Sie jemand ein HTML-Dokument in einer E-Mail
  2. in den JavaScript Genießen Sie Dateien von der Festplatte schaufelt und sie zu Joe Böse Hacker Server

Es ist Sicherheit nur grundlegende senden.

+0

Vielen Dank für die Antwort Quentin. Mein Hauptproblem hier (von Anfang an) war, dass ich glaubte, dass der Browser den Ordner und die Unterordner der HTML-Datei als einen "lokalen Server" sehen könnte, d. H. Die Sicherheitsüberprüfungen umgehen würde. Ich sehe jetzt, wie leicht es für einen Hacker sein würde, irgendjemandem zu sagen: "leg einfach diese Datei auf deinen Desktop und führe sie aus". :) – Snorvarg

+0

Ich kenn das als die Antwort, möchte aber erwähnen, dass ich denke, das ist ein Ausgabe sowieso, es ist ziemlich schwierig, eine herunterladbare "Anwendung" in HTML + Javascript heutzutage zu machen ... – Snorvarg

0

Verwenden Sie URL.createObjectURL(file) anstelle von Ajax.

+0

Vielen Dank. URL.createObjectURL (Datei) Erwarte Datei als Dateiobjekt, aber ich habe nur einen Dateipfad. Gibt es eine Möglichkeit, ein File-Objekt zu erstellen und es createObjectURL() zu geben, wie Sie es vorschlagen? (Ich habe es versucht: var file = Datei (Dateiname); aber es gibt eine Ausnahme.) – Snorvarg