Ich habe eine einfache Form eine Datei für das Hochladen, die gut genug synchron arbeitet: (ohne die Seite neu zu laden)Wie kann ich Dateien asynchron ohne jQuery hochladen und IE6-9 unterstützen?
<form id="uploadForm" action="/upload" method="post" encType="multipart/form-data">
<input type="file" id="file" name="file" accept=".csv" />
<input type="text" name="comment" />
<button type="submit">Upload</button>
</form>
Wie kann ich diese Form die Datei asynchron laden zu machen, und benachrichtigt werden, wenn der Upload abgeschlossen ist und wenn es irgendwelche Fehler gab?
Ich weiß, dass der primäre Weg, eine asynchrone Anforderung zu machen, ist ein XMLHttpRequest
zu verwenden, und ich sehe, dass so etwas wie die folgenden jetzt möglich ist (ich habe diesen Code nicht getestet):
function handleLoad() {
console.log(this.responseText);
}
function handleError(error) {
console.error(error.stack);
}
function handleSubmit(e) {
e.preventDefault();
var form = document.getElementById('uploadForm');
var request = new XMLHttpRequest();
request.addEventListener('load', handleLoad);
request.addEventListener('error', handleError);
request.open("POST", "/upload");
request.send(new FormData(form));
}
jedoch according to MDN, senden FormData
, Blob
s, File
s oder ArrayBuffer
s wird nur in IE10 + unterstützt, und ich möchte eine abwärtskompatible Lösung (die nicht jQuery verwendet).
Es gibt viele Antworten auf How can I upload files asynchronously?, aber alle Antworten, die ich bisher gelesen habe, verwenden jQuery oder verwenden die moderne XMLHttpRequest-Methode, die ich oben beschrieben habe.
Ich benutze React und habe keinen Nutzen für irgendetwas anderes, was jQuery anbietet, also würde ich gerne meine Download-Größe kleiner halten, indem ich das mit Vanille JS lösche.
Nicht [** diese Antwort **] (https://stackoverflow.com/a/14919756/2341603) und [** diese Antwort **] (https://stackoverflow.com/a/36314992/2341603) aus genau der Frage, die Sie verlinkt haben, dass? –
Ich bin bekannt dafür, Wege zu finden, um jQuery selbst zu vermeiden - aber das ist ein Beispiel für etwas, das Sie wahrscheinlich verwenden möchten ... Angenommen, Sie fragen tatsächlich nach einer Möglichkeit, es ohne Verwendung einer externen Bibliothek zu tun, die meisten Implementierungen wir könnte Ihnen geben, wäre unvollständig und nicht über alle Browser funktionieren. – Shadow
@ObsidianAge Antwort hier für den Ruf. Ich habe diese Frage gestellt, weil wir eine Top-Antwort verdienen, die jQuery nicht verwendet. Durch die Antworten jQuery saugt. – Andy