En javascript simple, c'est très simple: il suffit de joindre le rappel à {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);
mais je fais un site ajax qui télécharge des données html avec JQuery ( $.get()
ou $.ajax()
) et je me demandais quel est le meilleur moyen d'obtenir la progression d'une requête afin de l'afficher avec une petite barre de progression mais curieusement, je ne suis pas trouver quelque chose d'utile dans la documentation JQuery ...
jqXHR
objet (l'emballage de l' objet XHR retourné par$.ajax()
) et a trouvé unprogress
attribut dans ce (avecabort
,complete
,success
, etc.), mais dans la documentation JQuery, il manque: api.jquery.com/jQuery.ajax/#jqXHRRéponses:
Quelque chose comme ça pour
$.ajax
(HTML5 uniquement):la source
jQuery a déjà implémenté des promesses, il est donc préférable d'utiliser cette technologie et de ne pas déplacer la logique des événements vers le
options
paramètre. J'ai fait un plugin jQuery qui ajoute une promesse de progrès et maintenant il est facile à utiliser comme les autres promesses:Découvrez-le sur github
la source
TypeError: $.ajax(...).progress(...).progressUpload is not a function
... Quel est le problème?J'ai essayé trois manières différentes d'intercepter la construction de l'objet Ajax:
xhrFields
, mais cela ne permet qu'un seul auditeur, ne s'attache qu'à la progression du téléchargement (pas du téléchargement) et nécessite ce qui semble être un copier-coller inutile.progress
fonction à la promesse retournée, mais j'ai dû maintenir mon propre tableau de gestionnaires. Je n'ai pas pu trouver un bon objet pour attacher les gestionnaires car un endroit où j'accéderais au XHR et un autre j'aurais accès au jQuery XHR, mais je n'ai jamais eu accès à l'objet différé (seulement sa promesse).ajax
par le mien. Le seul inconvénient potentiel est que vous ne pouvez plus utiliser votre proprexhr()
réglage. Vous pouvez permettre cela en vérifiant s'iloptions.xhr
s'agit d'une fonction.J'appelle ma
promise.progress
fonctionxhrProgress
afin de pouvoir la retrouver facilement plus tard. Vous voudrez peut-être lui donner un autre nom pour séparer vos écouteurs de téléchargement et de téléchargement. J'espère que cela aide quelqu'un même si l'affiche originale a déjà ce dont il avait besoin.la source
$.ajax({ ... }).progress(function(evl) { console.log(evl); });
mais rien ne se passe. Pouvez-vous m'aider? :)jQuery a une
AjaxSetup()
fonction qui vous permet d'enregistrer des gestionnaires ajax globaux tels quebeforeSend
etcomplete
pour tous les appels ajax ainsi que vous permet d'accéder à l'xhr
objet pour faire la progression que vous recherchezla source
.ajaxStart()
,.ajaxStop()
,.ajaxComplete()
,.ajaxError()
,.ajaxSuccess()
,.ajaxSend()
-plutôt que dans les options pour objet$.ajaxSetup()
». < api.jquery.com/jQuery.ajaxSetup/#entry-longdesc >http://www.htmlgoodies.com/beyond/php/show-progress-report-for-long-running-php-scripts.html
Je cherchais une solution similaire et j'ai trouvé que celle-ci était pleinement utilisée.
}
et vos sorties serveur
la source
Suivez les étapes pour afficher la progression de la requête Ajax:
Pour vous faciliter la tâche, je vous recommande d'utiliser les classes JS pour afficher et masquer dynamiquement le spinner à cet effet.
J'espère que ça aide!
la source