Как переопределить использование jQuery XMLHttpRequest в $ .ajax? - PullRequest
9 голосов
/ 29 ноября 2010

Мне нужно addEventListener прослушивать progress событие до открытия соединения XMLHttp (т. Е. xhr.open()), но метод beforeSend возвращает уже открытый экземпляр xhr.Как мне переопределить его, чтобы правильно добавить прослушиватель?

( Примечание. Необходимо добавить прослушиватели событий перед вызовом open () по запросу. В противном случае события хода выполнения не сработают. )

1 Ответ

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

Вы можете переопределить функцию xhr в ajaxSetup или даже при каждом отдельном вызове $.ajax.Это задокументировано в $.ajax документах (спасибо, Ник!) .

Ваш код может выглядеть так (не проверено), если вы хотите сделать это все время:

(function() {
    var originalXhr = jQuery.ajaxSettings.xhr; 
    jQuery.ajaxSetup({
        xhr: function() {
            var req = originalXhr();
            if (req) {
                // Add your progress handler
            }
            return req;
        }
    });
})();

... или вот так ( живой пример ) только для конкретного запроса:

$.ajax({
  url: "path/to/resource",
  xhr: function() {
    var req = $.ajaxSettings.xhr();
    if (req) {
      // Add your handler here
    }
    return req;
  }
});

К сожалению,хотя переопределение xhr задокументировано, местоположение сконфигурированного в данный момент (jQuery.ajaxSettings.xhr), по-видимому, не соответствует действительности, поэтому технически вы все еще полагаетесь на недокументированную функцию, используя в своем коде jQuery.ajaxSettings.xhr.Вам просто нужно перепроверить, что это все еще присутствует в каждом выпуске точек, вероятно, он не будет слишком много двигаться (и jQuery.ajaxSettings по крайней мере упомянуто в документах, здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...