мне нужно addEventListener
для прослушивания progress
события перед тем открытия XMLHttp соединения (т.е. xhr.open()
), но метод beforeSend
возвращает экземпляр XHR уже открыт. Как бы я переопределить его, чтобы правильно добавить слушателя?
ответ
Вы можете переопределить функцию xhr
в ajaxSetup
или даже на каждом отдельном $.ajax
вызова. Это задокументировано в документах $.ajax
(спасибо Nick!).
Ваш код может выглядеть следующим образом (непроверенные), если вы хотите сделать это все время:
(function() {
var originalXhr = jQuery.ajaxSettings.xhr;
jQuery.ajaxSetup({
xhr: function() {
var req = originalXhr();
if (req) {
// Add your progress handler
}
return req;
}
});
})();
... или как это (live example) для всего конкретного запроса:
$.ajax({
url: "path/to/resource",
xhr: function() {
var req = $.ajaxSettings.xhr();
if (req) {
// Add your handler here
}
return req;
}
});
К сожалению, несмотря на то, что зарегистрировано xhr
, расположение сконфигурированного в настоящее время (jQuery.ajaxSettings.xhr
) не похоже, так что технически вы все еще полагаетесь на недокументированное d с помощью jQuery.ajaxSettings.xhr
в вашем коде. Вам просто нужно дважды проверить, что это все еще есть на каждом выпуске точки, вероятно, он не будет слишком много перемещаться (и jQuery.ajaxSettings
не менее упомянул в документах, here).
+1 - Просто отметьте, это задокументировано, последний вариант здесь: http://api.jquery.com/jQuery.ajax/ – 2010-11-29 12:10:29