Heim Web-Frontend js-Tutorial Ausführliche Erklärung zur Implementierung des Datei-Uploads mit Ajax und form+iframe

Ausführliche Erklärung zur Implementierung des Datei-Uploads mit Ajax und form+iframe

May 24, 2018 am 10:34 AM
ajax 文件

Die Datei-Upload-Funktion wird häufig in Projekten verwendet. In diesem Artikel werden zwei Implementierungen von Datei-Upload vorgestellt: Ajax und Form + Iframe. Interessierte Freunde können gemeinsam lernen.

Seit der Einführung von HTML5. Das Hochladen von Dateien wird sehr einfach. Es ist sehr praktisch, die Datei-Upload-Funktion zu lösen, die im Projekt verwendet werden muss. HTML5 unterstützt mehrere Bild-Uploads, Ajax-Uploads, Vorschauen von Bildern vor dem Hochladen und das Hochladen von Bildern per Drag-and-Drop. Es wird ausschließlich über die Dateisteuerung implementiert und enthält nur sehr wenig JS-Code.

HTML5Ajax-Upload

HTML5-Upload-Implementierung erfordert Dateikontrolle und XMLHttpRequest-Anfrage. Das Folgende ist ein Upload-Plugin, das ich gepackt habe:

function fileUpload(options) {
var opts = options || {};
var func = function() {};
this.fileInput = opts.fileInput || null;
this.url = opts.url || '';
this.fileList = [];
this.onFilter = opts.onFilter || function(f) {return f;}; //选择文件组的过滤方法
this.onSelect = opts.onSelect || func; //文件选择后
this.onProgress = opts.onProgress || func; //文件上传进度
this.onSuccess = opts.onSuccess || func; //文件上传成功时
this.onFailure = opts.onFailure || func; //文件上传失败时;
this.onComplete = opts.onComplete || func; //文件全部上传完毕时
this.init();
}
fileUpload.prototype = {
dealFiles: function(e) { //获取要上传的文件数组(用户选择文件后执行)
var files = e.target.files || e.dataTransfer.files;
this.fileList = this.onFilter(files);
for(var i = 0, file; file = this.fileList[i]; i++){ //增加唯一索引值
file.index = i;
}
this.onSelect(this.fileList);
return this;
},
removeFile: function(fileDelete) { //删除某一个文件
var arrFile = [];
for(var i = 0, file; file = this.fileList[i]; i++){
if (file != fileDelete) {
arrFile.push(file);
}
}
this.fileList = arrFile;
return this;
},
removeAll: function() { //清空文件队列
this.fileList = [];
return this;
},
uploadFile: function() { //上传文件
var me = this;
for(var i = 0, file; file = this.fileList[i]; i++){
(function(file) {
var formData = new FormData();
var xhr = new XMLHttpRequest();
if (xhr.upload) {
xhr.upload.addEventListener("progress", function(e) { // 上传中
me.onProgress(file, e.loaded, e.total);
}, false);
xhr.onreadystatechange = function(e) { // 文件上传成功或是失败
if (xhr.readyState == 4) {
if (xhr.status == 200) {
me.onSuccess(file, xhr.responseText);
me.removeFile(file);
if (!me.fileList.length) {
me.onComplete(); //上传全部完毕。执行回调
}
} else {
me.onFailure(file, xhr.responseText);
}
}
};
// 开始上传
formData.append('file', file);
xhr.open("POST", me.url, true);
xhr.send(formData);
}
})(file);
}
},
init: function() {
var me = this;
//文件选择控件选择
if (me.fileInput) {
me.fileInput.addEventListener("change", function(e) { me.dealFiles(e); }, false);
}
}
};
Nach dem Login kopieren

Ich glaube, Sie haben auch gesehen, dass formData im Code vorkommt Magie von HTML5. Mit Hilfe von formData können Sie die Funktion zum asynchronen Hochladen mehrerer Dateien ohne Aktualisierung problemlos implementieren und Vorschaubilder unterstützen. Erfreulich ist außerdem, dass mittlerweile viele Browser HTML5 unterstützen.

Aber! ! ! Versionen unter IE9 werden nicht unterstützt! !

Darüber hinaus hat die obige Methode einen weiteren Nachteil, da sie den domänenübergreifenden Upload nicht unterstützt. Wenn Sie diese beiden Geschäftsszenarien erfüllen müssen, versuchen Sie es mit der folgenden Methode und Iframe zum Hochladen. Schauen wir uns das genauer an:

Formular an iframe übermittelt

HTML-Code:

<iframe name="demoIframe" style="display:none"></iframe>
<form target="demoIframe" action="upload.php" method="post" enctype="multipart/form-data">
<input class="filename" type="file" name="fileLabel">
<input type="submit" value="提交">
</form>
Nach dem Login kopieren

Wir klicken auf „Senden“ und Sie können die folgende Anfrage sehen:

wurde Datei-Upload eingereicht. Dann ist das Hinzufügen dieser upload.php-Schnittstelle verfügbar, und wenn der Upload erfolgreich ist, wird Folgendes zurückgegeben:

{
"code": "200",
"success": true,
"data": {
...
}
}
Nach dem Login kopieren

Wie erhalten wir die Rückgabe? Wert, also was ist der nächste Schritt? Da wir es in einen Iframe hochgeladen haben, müssen wir nur das Ladeereignis des Iframes abhören. Wenn es einen Rückgabewert gibt, können wir ihn zur weiteren Verarbeitung abrufen. Schauen Sie sich den js-Code an:

$(&#39;iframe&#39;).on(&#39;load&#39;, function() {
var responseText = $(&#39;iframe&#39;)[0].contentDocument.body.textContent;
var responseData = JSON.parse(responseText) || {};
if (responseData.isSuccess == true || responseData.code == 200) {
//success
} else {
//error 
}
});
Nach dem Login kopieren

Das Obige habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.

Verwandte Artikel:

Schnelle Lösung für die Ajax-Übermittlung verstümmelter Zeichen unter IE

Ajax-Formular-Beispielcode für asynchrone Upload-Dateien

Kaskadierende Bedienung des Dropdown-Menüs

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zur Implementierung des Datei-Uploads mit Ajax und form+iframe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Können Dateien im Tmp-Format gelöscht werden? Können Dateien im Tmp-Format gelöscht werden? Feb 24, 2024 pm 04:33 PM

TMP-Formatdateien sind ein temporäres Dateiformat, das normalerweise von einem Computersystem oder Programm während der Ausführung generiert wird. Der Zweck dieser Dateien besteht darin, temporäre Daten zu speichern, um die ordnungsgemäße Ausführung des Programms zu unterstützen oder die Leistung zu verbessern. Sobald die Programmausführung abgeschlossen ist oder der Computer neu gestartet wird, werden diese tmp-Dateien häufig nicht mehr benötigt. Daher sind Dateien im Tmp-Format grundsätzlich löschbar. Darüber hinaus kann das Löschen dieser tmp-Dateien Festplattenspeicher freigeben und den normalen Betrieb des Computers gewährleisten. Bevor wir jedoch Dateien im Tmp-Format löschen, müssen wir dies tun

Wie übertrage ich Dateien von Quark Cloud Disk auf Baidu Cloud Disk? Wie übertrage ich Dateien von Quark Cloud Disk auf Baidu Cloud Disk? Mar 14, 2024 pm 02:07 PM

Quark Netdisk und Baidu Netdisk sind derzeit die am häufigsten verwendete Netdisk-Software zum Speichern von Dateien. Wenn Sie die Dateien in Quark Netdisk auf Baidu Netdisk speichern möchten, wie gehen Sie vor? In dieser Ausgabe hat der Herausgeber die Tutorial-Schritte zum Übertragen von Dateien vom Quark Network Disk-Computer auf die Baidu Network Disk zusammengestellt. Werfen wir einen Blick auf die Bedienung. Wie speichere ich Quark-Netzwerkfestplattendateien auf einer Baidu-Netzwerkfestplatte? Um Dateien von Quark Network Disk auf Baidu Network Disk zu übertragen, müssen Sie zunächst die erforderlichen Dateien von Quark Network Disk herunterladen, dann den Zielordner im Baidu Network Disk-Client auswählen und ihn öffnen. Ziehen Sie dann die von Quark Cloud Disk heruntergeladenen Dateien per Drag & Drop in den vom Baidu Cloud Disk-Client geöffneten Ordner oder verwenden Sie die Upload-Funktion, um die Dateien zu Baidu Cloud Disk hinzuzufügen. Überprüfen Sie nach Abschluss des Uploads unbedingt, ob die Datei erfolgreich in Baidu Cloud Disk übertragen wurde. Das ist es

Was tun, wenn der Fehlercode 0x80004005 angezeigt wird? Der Editor zeigt Ihnen, wie Sie den Fehlercode 0x80004005 beheben können. Was tun, wenn der Fehlercode 0x80004005 angezeigt wird? Der Editor zeigt Ihnen, wie Sie den Fehlercode 0x80004005 beheben können. Mar 21, 2024 pm 09:17 PM

Wenn Sie einen Ordner auf Ihrem Computer löschen oder dekomprimieren, wird manchmal das Dialogfeld „Fehler 0x80004005: Nicht spezifizierter Fehler“ angezeigt. Wie können Sie diese Situation lösen? Es gibt tatsächlich viele Gründe, warum der Fehlercode 0x80004005 angezeigt wird, aber die meisten davon werden durch Viren verursacht. Wir können die DLL erneut registrieren, um das Problem zu lösen. Nachfolgend erklärt Ihnen der Editor die Erfahrung beim Umgang mit dem Fehlercode 0x80004005 . Einige Benutzer erhalten bei der Verwendung ihres Computers den Fehlercode 0X80004005. Der Fehler 0x80004005 wird hauptsächlich dadurch verursacht, dass der Computer bestimmte Dynamic Link Library-Dateien nicht korrekt registriert oder dass eine Firewall keine HTTPS-Verbindungen zwischen dem Computer und dem Internet zulässt. Wie wäre es also?

Was ist die Datei hiberfil.sys? Kann hiberfil.sys gelöscht werden? Was ist die Datei hiberfil.sys? Kann hiberfil.sys gelöscht werden? Mar 15, 2024 am 09:49 AM

Vor kurzem haben viele Internetnutzer den Herausgeber gefragt: Was ist die Datei hiberfil.sys? Kann hiberfil.sys viel Speicherplatz auf Laufwerk C beanspruchen und gelöscht werden? Der Editor kann Ihnen mitteilen, dass die Datei hiberfil.sys gelöscht werden kann. Werfen wir einen Blick auf die Details unten. hiberfil.sys ist eine versteckte Datei im Windows-System und auch eine System-Ruhezustandsdatei. Es wird normalerweise im Stammverzeichnis des Laufwerks C gespeichert und seine Größe entspricht der Größe des installierten Speichers des Systems. Diese Datei wird verwendet, wenn sich der Computer im Ruhezustand befindet, und enthält die Speicherdaten des aktuellen Systems, damit dieser bei der Wiederherstellung schnell wieder in den vorherigen Zustand versetzt werden kann. Da seine Größe der Speicherkapazität entspricht, nimmt er möglicherweise mehr Festplattenspeicher ein. hiber

Unterschiedliche Verwendung von Schrägstrichen und Backslashes in Dateipfaden Unterschiedliche Verwendung von Schrägstrichen und Backslashes in Dateipfaden Feb 26, 2024 pm 04:36 PM

Ein Dateipfad ist eine Zeichenfolge, die vom Betriebssystem verwendet wird, um eine Datei oder einen Ordner zu identifizieren und zu finden. In Dateipfaden gibt es zwei gängige Symbole zur Trennung von Pfaden, nämlich den Schrägstrich (/) und den Backslash (). Diese beiden Symbole haben in verschiedenen Betriebssystemen unterschiedliche Verwendungen und Bedeutungen. Der Schrägstrich (/) ist ein häufig verwendetes Pfadtrennzeichen in Unix- und Linux-Systemen. Auf diesen Systemen beginnen Dateipfade im Stammverzeichnis (/) und werden durch Schrägstriche zwischen den einzelnen Verzeichnissen getrennt. Zum Beispiel der Pfad /home/user/Docume

Detaillierte Erklärung des Protokollanzeigebefehls im Linux-System! Detaillierte Erklärung des Protokollanzeigebefehls im Linux-System! Mar 06, 2024 pm 03:55 PM

In Linux-Systemen können Sie den folgenden Befehl verwenden, um den Inhalt der Protokolldatei anzuzeigen: Befehl tail: Der Befehl tail wird verwendet, um den Inhalt am Ende der Protokolldatei anzuzeigen. Dies ist ein allgemeiner Befehl zum Anzeigen der neuesten Protokollinformationen. tail [Option] [Dateiname] Zu den häufig verwendeten Optionen gehören: -n: Geben Sie die Anzahl der anzuzeigenden Zeilen an. Der Standardwert ist 10 Zeilen. -f: Überwachen Sie den Dateiinhalt in Echtzeit und zeigen Sie den neuen Inhalt automatisch an, wenn die Datei aktualisiert wird. Beispiel: tail-n20logfile.txt#Zeigen Sie die letzten 20 Zeilen der Datei logfile.txt an. tail-flogfile.txt#Überwachen Sie den aktualisierten Inhalt der Datei logfile.txt in Echtzeit. Head-Befehl: Der Head-Befehl wird verwendet, um den Anfang anzuzeigen der Protokolldatei

Ausführliche Erläuterung der Rolle von .ibd-Dateien in MySQL und der damit verbundenen Vorsichtsmaßnahmen Ausführliche Erläuterung der Rolle von .ibd-Dateien in MySQL und der damit verbundenen Vorsichtsmaßnahmen Mar 15, 2024 am 08:00 AM

Ausführliche Erläuterung der Rolle von .ibd-Dateien in MySQL und der damit verbundenen Vorsichtsmaßnahmen. MySQL ist ein beliebtes relationales Datenbankverwaltungssystem, und die Daten in der Datenbank werden in verschiedenen Dateien gespeichert. Unter diesen ist die .ibd-Datei eine Datendatei in der InnoDB-Speicher-Engine, die zum Speichern von Daten und Indizes in Tabellen verwendet wird. Dieser Artikel bietet eine detaillierte Analyse der Rolle der .ibd-Datei in MySQL und liefert relevante Codebeispiele, um den Lesern ein besseres Verständnis zu erleichtern. 1. Die Rolle von .ibd-Dateien: Speichern von Daten: .ibd-Dateien sind InnoDB-Speicher

Wie erhalte ich Variablen aus der PHP-Methode mit Ajax? Wie erhalte ich Variablen aus der PHP-Methode mit Ajax? Mar 09, 2024 pm 05:36 PM

Die Verwendung von Ajax zum Abrufen von Variablen aus PHP-Methoden ist ein häufiges Szenario in der Webentwicklung. Durch Ajax kann die Seite dynamisch abgerufen werden, ohne dass die Daten aktualisiert werden müssen. In diesem Artikel stellen wir vor, wie man Ajax verwendet, um Variablen aus PHP-Methoden abzurufen, und stellen spezifische Codebeispiele bereit. Zuerst müssen wir eine PHP-Datei schreiben, um die Ajax-Anfrage zu verarbeiten und die erforderlichen Variablen zurückzugeben. Hier ist ein Beispielcode für eine einfache PHP-Datei getData.php:

See all articles