Der einfachste und robusteste Weg, den ich in der Vergangenheit gemacht habe, besteht darin, einfach ein verstecktes iFrame-Tag mit Ihrem Formular anzuvisieren. Anschließend wird es innerhalb des Iframes gesendet, ohne die Seite neu zu laden.
Das ist, wenn Sie kein Plugin, JavaScript oder andere Formen von "Magie" außer HTML verwenden möchten. Natürlich können Sie dies mit JavaScript kombinieren oder was haben Sie ...
<form target="iframe" action="" method="post" enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>
<iframe name="iframe" id="iframe" style="display:none" ></iframe>
Sie können auch den Inhalt des Iframes onLoad
auf Serverfehler oder Erfolgsantworten lesen und diesen dann an den Benutzer ausgeben.
Chrome, iFrames und onLoad
-note- Sie müssen nur weiterlesen, wenn Sie daran interessiert sind, wie Sie beim Hochladen / Herunterladen einen UI-Blocker einrichten
Derzeit löst Chrome das onLoad-Ereignis für den Iframe nicht aus, wenn es zum Übertragen von Dateien verwendet wird. Firefox, IE und Edge lösen alle das Onload-Ereignis für Dateiübertragungen aus.
Die einzige Lösung, die ich für Chrome gefunden habe, war die Verwendung eines Cookies.
Um dies im Grunde zu tun, wenn der Upload / Download gestartet wird:
- [Client-Seite] Starten Sie ein Intervall, um nach dem Vorhandensein eines Cookies zu suchen
- [Serverseite] Machen Sie mit den Dateidaten alles, was Sie brauchen
- [Serverseitig] Setzen Sie das Cookie für das clientseitige Intervall
- [Client Side] Interval sieht das Cookie und verwendet es wie das onLoad-Ereignis. Sie können beispielsweise einen UI-Blocker starten und dann beim Laden (oder wenn ein Cookie erstellt wird) den UI-Blocker entfernen.
Die Verwendung eines Cookies ist hässlich, funktioniert aber.
Ich habe ein jQuery-Plugin erstellt, um dieses Problem für Chrome beim Herunterladen zu beheben. Sie finden es hier
https://github.com/ArtisticPhoenix/jQuery-Plugins/blob/master/iDownloader.js
Das gleiche Grundprinzip gilt auch für das Hochladen.
So verwenden Sie den Downloader (natürlich auch den JS)
$('body').iDownloader({
"onComplete" : function(){
$('#uiBlocker').css('display', 'none'); //hide ui blocker on complete
}
});
$('somebuttion').click( function(){
$('#uiBlocker').css('display', 'block'); //block the UI
$('body').iDownloader('download', 'htttp://example.com/location/of/download');
});
Erstellen Sie auf der Serverseite kurz vor dem Übertragen der Dateidaten das Cookie
setcookie('iDownloader', true, time() + 30, "/");
Das Plugin sieht das Cookie und löst dann den onComplete
Rückruf aus.