jQuery $ .ajax и readyStates - PullRequest
       34

jQuery $ .ajax и readyStates

8 голосов
/ 05 ноября 2010

Как вызвать готовые состояния Ajax для метода jQuery $.ajax?

Ответы [ 3 ]

4 голосов
/ 05 ноября 2010

$.ajax() возвращает объект XmlHttpRequest, поэтому, если вы действительно хотите получить к нему доступ при изменении состояния, вы можете сделать это:

var xhr = $.ajax({ ... });
xhr.onreadystatechange = function() { alert(xhr.readyState); };

Но встроенные обратные вызовы должны быть всем, что вам нужно для большинства применений, в частности success и complete.

Чтобы сделать что-то до того, как запрос сработает, используйте beforeSend или более подходящее для большинства случаевсобытия .ajaxStart() и .ajaxStop() ... например, для отображения сообщения о загрузке всякий раз, когда происходит какое-либо действие ajax.

4 голосов
/ 21 декабря 2014

Метод, протестированный с помощью 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: "..."
});

По сути, мне нужен был обратный вызов после того, как readyState станет 1 (Подключено), что в моем случае было полезно при реализации длинных опрашивающих "push" уведомлений с помощью jQuery.

1 голос
/ 05 ноября 2010

Вы сможете получить все, что вам нужно, установив обратные вызовы для параметров success, error и complete в объекте, который вы передаете методу ajax().Взгляните на документацию:

http://api.jquery.com/jQuery.ajax/

По сути, это работает так:

$.ajax({
    url: 'ajax/test.html',
    success: function(data) {
        alert('Load was performed.');
    },
    error: function() {alert("error occurred.")},
    complete: function() {alert("ajax complete.")}
});

Вы можете увидеть в документах, какие именно параметры у вас естьв функции обратного вызова.

...