Question

Comment appeler les états Ajax prêts sur la méthode $.ajax jQuery?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top