Im Klartext ist Javascript sehr einfach: Sie müssen nur den Rückruf anhängen {XMLHTTPRequest}.onprogress
var xhr = new XMLHttpRequest();
xhr.onprogress = function(e){
if (e.lengthComputable)
var percent = (e.loaded / e.total) * 100;
};
xhr.open('GET', 'http://www...', true);
xhr.onreadystatechange = function() {
...
};
xhr.send(null);
Aber ich mache eine Ajax-Site, die HTML-Daten mit JQuery ( $.get()
oder $.ajax()
) herunterlädt, und ich habe mich gefragt, wie ich den Fortschritt einer Anfrage am besten abrufen kann, um sie mit einem kleinen Fortschrittsbalken anzuzeigen, aber seltsamerweise nicht in der JQuery-Dokumentation etwas Nützliches finden ...
javascript
ajax
jquery
xmlhttprequest
Guari
quelle
quelle
jqXHR
Objekt (der Wrapper von XHR - Objekt zurückgegeben durch$.ajax()
) und fand einprogress
Attribut in sie (zusammen mitabort
,complete
,success
, etc.), aber In JQuery-Dokumenten fehlt dies: api.jquery.com/jQuery.ajax/#jqXHRAntworten:
So etwas für
$.ajax
(allerdings nur HTML5):quelle
jQuery hat bereits Versprechen implementiert, daher ist es besser, diese Technologie zu verwenden und die Ereignislogik nicht in
options
Parameter zu verschieben. Ich habe ein jQuery-Plugin erstellt, das Fortschrittsversprechen hinzufügt, und jetzt ist es einfach zu verwenden, genau wie andere Versprechen:Schau es dir bei Github an
quelle
TypeError: $.ajax(...).progress(...).progressUpload is not a function
.... Was ist das Problem?Ich habe drei verschiedene Möglichkeiten ausprobiert, um die Konstruktion des Ajax-Objekts abzufangen:
xhrFields
, aber das erlaubt nur einen Listener, hängt nur an den Download-Fortschritt (nicht an den Upload) und erfordert scheinbar unnötiges Kopieren und Einfügen.progress
dem zurückgegebenen Versprechen eine Funktion hinzu, aber ich musste meine eigene Reihe von Handlern warten. Ich konnte kein gutes Objekt zum Anhängen der Handler finden, da ich an einem Ort auf das XHR und an einem anderen auf das jQuery XHR zugreifen würde, aber ich hatte nie Zugriff auf das zurückgestellte Objekt (nur dessen Versprechen).ajax
durch meinen eigenen ersetzt. Das einzige mögliche Manko ist, dass Sie Ihre eigenexhr()
Einstellung nicht mehr verwenden können . Sie können dies berücksichtigen, indem Sie überprüfen, oboptions.xhr
es sich um eine Funktion handelt.Ich rufe meine
promise.progress
Funktion tatsächlich auf,xhrProgress
damit ich sie später leicht finden kann. Vielleicht möchten Sie es anders benennen, um Ihre Upload- und Download-Listener zu trennen. Ich hoffe, das hilft jemandem, auch wenn das Originalplakat bereits das bekommen hat, was er brauchte.quelle
$.ajax({ ... }).progress(function(evl) { console.log(evl); });
aber es passiert nichts. Können Sie mir helfen? :)jQuery verfügt über eine
AjaxSetup()
Funktion, mit der Sie globale Ajax-Handler wiebeforeSend
undcomplete
für alle Ajax-Aufrufe registrieren und auf dasxhr
Objekt zugreifen können, um den gewünschten Fortschritt zu erzielenquelle
.ajaxStart()
,.ajaxStop()
,.ajaxComplete()
,.ajaxError()
,.ajaxSuccess()
,.ajaxSend()
-rather als in den Optionen Objekt für$.ajaxSetup()
. ' < api.jquery.com/jQuery.ajaxSetup/#entry-longdesc >http://www.htmlgoodies.com/beyond/php/show-progress-report-for-long-running-php-scripts.html
Ich suchte nach einer ähnlichen Lösung und fand diese voll ausnutzen.
}}
und Ihre Serverausgaben
quelle
Befolgen Sie die Schritte, um den Fortschritt der Ajax-Anforderung anzuzeigen:
Zur Vereinfachung empfehle ich die Verwendung von JS-Klassen zum dynamischen Anzeigen und Ausblenden des Spinners für diesen Zweck.
Ich hoffe das hilft!
quelle