jQuery $ .ajax et readyStates
-
29-09-2019 - |
Question
Comment appeler les états Ajax prêts sur la méthode $.ajax
jQuery?
La solution
$.ajax()
retourne l'objet XMLHttpRequest, donc si vous vraiment veulent y accéder que les changements d'état, vous pouvez faire ceci:
var xhr = $.ajax({ ... });
xhr.onreadystatechange = function() { alert(xhr.readyState); };
Mais le haut-callbacks devrait être tout ce que vous avez besoin pour la plupart des utilisations, en particulier success
et complete
.
Pour faire des choses avant que les feux de demande, l'utilisation beforeSend
, ou de façon plus appropriée pour la plupart des cas, le .ajaxStart()
et .ajaxStop()
événements ... par exemple pour afficher un message de chargement chaque fois qu'une activité ajax est en cours.
Autres conseils
Méthode, testé avec jQuery 2.0.2:
$.ajax({
beforeSend: function (jqXHR, settings) {
var self = this;
var xhr = settings.xhr;
settings.xhr = function () {
var output = xhr();
output.onreadystatechange = function () {
if (typeof(self.readyStateChanged) == "function") {
self.readyStateChanged(this);
}
};
return output;
};
},
readyStateChanged: function (xhr) {
if (xhr.readyState == 1) {
/* Connected! Do something */
}
},
url: "..."
});
En fait, ce que je avais besoin était un rappel après readyState
devient 1
(Connected), qui, dans mon cas, a été utile lors de la mise en œuvre de longues notifications "push" de vote avec jQuery.
Vous devriez être en mesure d'obtenir tout ce que vous avez besoin en mettant callbacks pour les success
, error
et options de complete
dans l'objet que vous passez dans la méthode ajax()
. Jetez un oeil à la documentation:
http://api.jquery.com/jQuery.ajax/
En gros, cela fonctionne comme ceci:
$.ajax({
url: 'ajax/test.html',
success: function(data) {
alert('Load was performed.');
},
error: function() {alert("error occurred.")},
complete: function() {alert("ajax complete.")}
});
Vous pouvez voir les docs exactement quels sont les paramètres que vous avez accès à des fonctions de rappel.