Comment puis-je connaître les readstates d’une requête ajax via jquery? En général, sans utiliser jquery, nous enverrons une requête ajax comme celle-ci:
http.open("POST", url, true); http.onreadystatechange = function() { if(http.readyState == 4 && http.status == 200) { // do something } }
Donc, je peux facilement suivre la valeur de readystate de 1 à 4 en utilisant le code ci-dessus, et effectuer les actions nécessaires comme montrer une icône de chargement lorsque readystate est à 1.
Mais via un appel ajax jQuery, comment puis-je suivre les valeurs readystate?
Je passe un appel ajax via jquery comme ceci:
$.post('ajax/test.html', function(data) { $('.result').html(data); });
Regardez la documentation de $.ajax
. Vous avez la possibilité de passer différents rappels (peut-être pas pour “l’état prêt” mais c’est suffisant pour un indicateur):
beforeSend(jqXHR, settings)
Fonction
Fonction de rappel préalable à la demande pouvant être utilisée pour modifier l’objectjqXHR
(dans jQuery 1.4.x,XMLHTTPRequest
) avant son envoi. Utilisez-le pour définir des en-têtes personnalisés, etc. LesjqXHR
et dessettings
sont transmis en tant qu’arguments. Ceci est un événement Ajax. Renvoyerfalse
dans la fonctionbeforeSend
annulera la demande. A partir de jQuery 1.5, l’optionbeforeSend
sera appelée quel que soit le type de demande.
success(data, textStatus, jqXHR)
Fonction, Tableau
Une fonction à appeler si la requête aboutit. La fonction reçoit trois arguments: Lesdata
renvoyées par le serveur, formatées en fonction du paramètredataType
; une chaîne décrivant le statut; et l’objectjqXHR
(dans jQuery 1.4.x,XMLHttpRequest
). À partir de jQuery 1.5, le paramètre success peut accepter un tableau de fonctions. Chaque fonction sera appelée à tour de rôle. Ceci est un événement Ajax .
error(jqXHR, textStatus, errorThrown)
Fonction
Une fonction à appeler si la requête échoue. La fonction reçoit trois arguments: l’objectjqXHR
(dans jQuery 1.4.x,XMLHttpRequest
), une chaîne décrivant le type d’erreur survenue et un object exception facultatif, le cas échéant. Les valeurs possibles pour le deuxième argument (outrenull
) sont"timeout"
,"error"
,"abort"
et"parsererror"
. Ceci est un événement Ajax . À partir de jQuery 1.5, le paramètre d’error
peut accepter un tableau de fonctions. Chaque fonction sera appelée à tour de rôle. Remarque: Ce gestionnaire n’est pas appelé pour les requêtes de script interdomaine et JSONP.
complete(jqXHR, textStatus)
, Array
Une fonction à appeler à la fin de la demande (après exécution des rappels d’error
et d’error
). La fonction reçoit deux arguments: l’objectjqXHR
(dans jQuery 1.4.x,XMLHTTPRequest
) et une chaîne catégorisant le statut de la demande ("success"
,"notmodified"
,"error"
,"timeout"
,"abort"
, ou"parsererror"
). À partir de jQuery 1.5, le paramètrecomplete
peut accepter un tableau de fonctions. Chaque fonction sera appelée à tour de rôle. Ceci est un événement Ajax .
La meilleure idée serait donc d’afficher l’indicateur dans le rappel passé à beforeSend
et de le masquer complete
.
Exemple:
Vous devrez donc réécrire votre code comme suit:
$.ajax({ url: 'ajax/test.html', type: 'POST', beforeSend: function() { // show indicator }, complete: function() { // hide indicator }, success: function(data) { $('.result').html(data); } });
Bien que je ne comprenne pas pourquoi vous utilisez POST car vous n’envoyez aucune donnée (du moins dans votre exemple de code).
utilisation
$.ajax({ url:, success:function(){ }//This is ready state 4 });
perform necessary action like showing a loading icon when readystate is 1.
pour cela, vous pouvez utiliser ajaxStart et ajaxStop
http://api.jquery.com/category/ajax/ Je pense que vous constaterez que les différents événements correspondent aux différents readyStates.