Dans Prototype, je peux montrer une image "loading ..." avec ce code:
var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars,
onLoading: showLoad, onComplete: showResponse} );
function showLoad () {
...
}
Dans jQuery , je peux charger une page de serveur dans un élément avec ceci:
$('#message').load('index.php?pg=ajaxFlashcard');
mais comment attacher un spinner de chargement à cette commande comme je l'ai fait dans Prototype?
jquery
spinner
prototypejs
equivalence
language-interoperability
Edward Tanguay
la source
la source
Pour jQuery j'utilise
la source
beforeSend
avant chaque appel, alors qu'ilajaxStart
n'est déclenché que lorsque la première méthode ajax est appelée. De même pourajaxStop
, il est appelé lorsque le dernier appel ajax se termine. Si vous avez plusieurs demandes simultanées, l'extrait de cette réponse ne fonctionnera pas correctement.Vous pouvez simplement utiliser la
.ajax
fonction de jQuery et utiliser son optionbeforeSend
et définir une fonction dans laquelle vous pouvez afficher quelque chose comme un div de chargeur et en cas de succès, vous pouvez masquer ce div de chargeur.Vous pouvez avoir n'importe quelle image Gif tournante. Voici un site Web qui est un excellent générateur de chargeur AJAX selon votre schéma de couleurs: http://ajaxload.info/
la source
success
ne sera pas appelé en cas d'erreur, mais "vous recevrez toujours uncomplete
rappel, même pour les demandes synchrones", selon jQuery Ajax Events .Vous pouvez insérer l'image animée dans le DOM juste avant l'appel AJAX, et faire une fonction en ligne pour la supprimer ...
Cela garantira que votre animation démarre à la même image lors des demandes suivantes (si cela est important). Notez que les anciennes versions d'IE peuvent avoir des problèmes avec l'animation.
Bonne chance!
la source
http://docs.jquery.com/Ajax/load#urldatacallback
la source
Si vous utilisez,
$.ajax()
vous pouvez utiliser quelque chose comme ceci:la source
Utilisez le plugin de chargement: http://plugins.jquery.com/project/loading
la source
Variante: J'ai une icône avec id = "logo" en haut à gauche de la page principale; un gif spinner est ensuite superposé sur le dessus (avec transparence) lorsque ajax fonctionne.
la source
J'ai fini par apporter deux modifications à la réponse d'origine .
document
. Cela rend plus difficile de filtrer uniquement certaines des demandes ajax. Soo ...Voici le code après ces modifications:
la source
ajaxComplete
semble tirer prématurément lorsque les demandes de nouvelle tentative, donc je l' ai utilisé une combinaison deajaxSend
etajaxStop
il fonctionne très bien.Je veux également contribuer à cette réponse. Je cherchais quelque chose de similaire dans jQuery et c'est ce que j'ai finalement utilisé.
J'ai obtenu mon spinner de chargement sur http://ajaxload.info/ . Ma solution est basée sur cette réponse simple sur http://christierney.com/2011/03/23/global-ajax-loading-spinners/ .
Fondamentalement, votre balisage HTML et CSS ressemblerait à ceci:
Et puis votre code pour jQuery ressemblerait à ceci:
C'est aussi simple que ça :)
la source
Vous pouvez simplement affecter une image de chargeur à la même balise sur laquelle vous chargerez plus tard du contenu à l'aide d'un appel Ajax:
Vous pouvez également remplacer la balise span par une balise image.
la source
Outre la définition de valeurs par défaut globales pour les événements ajax, vous pouvez définir le comportement d'éléments spécifiques. Peut-être que changer de classe suffirait?
Exemple CSS, pour masquer #myForm avec un spinner:
la source
Notez que vous devez utiliser des appels asynchrones pour que les filateurs fonctionnent (au moins c'est ce qui a fait que le mien ne s'affichait qu'après l'appel ajax, puis s'est rapidement dissipé car l'appel était terminé et a retiré le fileur).
la source
la source
J'ai utilisé ce qui suit avec jQuery UI Dialog. (Peut-être que cela fonctionne avec d'autres rappels ajax?)
Le contient un gif de chargement animé jusqu'à ce que son contenu soit remplacé à la fin de l'appel ajax.
la source
C'est la meilleure façon pour moi:
jQuery :
Café :
Documents: ajaxStart , ajaxStop
la source
Javascript
CSS
la source
Il s'agit d'un plugin très simple et intelligent pour cet objectif spécifique: https://github.com/hekigan/is-loading
la source
Je fais ça:
la source
Je pense que tu as raison. Cette méthode est trop globale ...
Cependant - c'est une bonne valeur par défaut lorsque votre appel AJAX n'a aucun effet sur la page elle-même. (sauvegarde en arrière-plan par exemple). (vous pouvez toujours le désactiver pour un certain appel ajax en passant "global": false - voir la documentation sur jquery
Lorsque l'appel AJAX est destiné à actualiser une partie de la page, j'aime que mes images de "chargement" soient spécifiques à la section actualisée. Je voudrais voir quelle partie est rafraîchie.
Imaginez à quel point ce serait cool si vous pouviez simplement écrire quelque chose comme:
Et cela montrerait un "chargement" sur cette section. Vous trouverez ci-dessous une fonction que j'ai écrite qui gère également l'affichage du "chargement" mais elle est spécifique à la zone que vous rafraîchissez en ajax.
Tout d'abord, laissez-moi vous montrer comment l'utiliser
Et c'est la fonction - un début de base que vous pouvez améliorer comme vous le souhaitez. c'est très flexible.
la source
Si vous ne voulez pas écrire votre propre code, il existe également de nombreux plugins qui font exactement cela:
la source
Si vous prévoyez d'utiliser un chargeur à chaque fois que vous effectuez une demande de serveur, vous pouvez utiliser le modèle suivant.
Ce code utilise notamment le plugin jajaxloader (que je viens de créer)
https://github.com/lingtalfi/JAjaxLoader/
la source
Mon code ajax ressemble à ceci, en effet, je viens de commenter async: false line et le spinner apparaît.
Je montre le spinner dans une fonction avant le code ajax:
Pour Html, j'ai utilisé une classe impressionnante de polices:
<i id="ajaxspinner" class="fas fa-spinner fa-spin fa-3x fa-fw" style="display:none"></i>
J'espère que cela aide quelqu'un.
la source
Vous pouvez toujours utiliser le plugin Block UI jQuery qui fait tout pour vous, et il bloque même la page de toute entrée pendant le chargement de ajax. Dans le cas où le plugin ne semble pas fonctionner, vous pouvez lire sur la bonne façon de l'utiliser dans cette réponse. Vérifiez-le.
la source