2016-06-02 2 views
1

Ich versuche, den HTML5 FileReader zu verwenden, um eine CSV-Datei zu laden, aber seine onLoad Funktion löst nie aus (versucht mit Firefox und Chrome). Das ist trotz seiner result Eigenschaft, die mit dem Inhalt der Datei aufgefüllt wird, seine readyState, die auf 2 (DONE) festgelegt wird, und seine error-Eigenschaft, die Null bleibt. Es erzeugt auch keine Konsolenfehler. Mein Code ist unter:HTML5 FileReader kann keine Funktionen auslösen

var reader = new FileReader(); 

function process_file(file) { 
    reader.onError = function(evt) {upload_failed("There was an error opening your CSV file. It may be corrupted.")}; 
    reader.onAbort = function(evt) {upload_failed("There was an error opening your CSV file. It may be corrupted.")}; 
    reader.onLoad = upload_complete; 
    reader.readAsText(file); 
    alert('Started'); 
} 
function upload_complete(evt) { 
    alert('Complete'); 
    csv_data = reader.result; 
    $submit_button.prop('disabled', false); 
} 
function upload_failed(message) { 
    alert('Failed'); 
    $submit_button.prop('disabled', true); 
    alert(message); 
} 

"Gestartet" ist die einzige Warnung, die angezeigt wird. Auf die anderen Eigenschaften des Lesers wurde über die Firefox-Konsole zugegriffen. Die process_file Funktion wird durchlaufen:

<input type='file' onchange="process_file(this.files[0])" style="display: none;" accept=".csv" "id and name etc..."/> 

Ich mag würde wissen, was ich falsch mache und wie die onLoad Funktion Trigger haben, wenn die Datei geladen wird.

Antwort

2

Gemäß der FileReader Dokumente werden die Rückrufe an onload, onprogress und onerror übergeben. Sie camel-cased sie zu onLoad, onProgress und onError.

var reader = new FileReader(); 

function process_file(file) { 
    reader.onerror = function(evt) {upload_failed("There was an error opening your CSV file. It may be corrupted.")}; 
    reader.onabort = function(evt) {upload_failed("There was an error opening your CSV file. It may be corrupted.")}; 
    reader.onload = upload_complete; 
    reader.readAsText(file); 
    alert('Started'); 
} 
+1

Die Stunden, die ich durch das Netz schleppte und ich vermisste etwas so offensichtlich. Vielen Dank! Aus Neugier, warum hat das, was ich gemacht habe, einen Fehler verursacht? Wurde im FileReader-Objekt eine neue Variable erstellt? – Sman789

+0

'FileReader' erweitert' Object', so dass Sie beliebige Eigenschaften festlegen können. Das Setzen von 'onLoad' hat keinen Fehler verursacht, sondern nur eine Eigenschaft, die nie verwendet wurde. Ich habe diesen Fehler viele Male mit den Image- und FileReader-APIs gemacht, was auf die schreckliche Standardisierung der verschiedenen DOM- und JS-APIs zurückzuführen ist. –

Verwandte Themen