我需要addEventListener
在打开XMLHttp连接之前监听progress
事件(即xhr.open()
),但beforeSend
方法会返回xhr实例已经打开。如何覆盖它以正确添加监听器?
答案 0 :(得分:8)
您可以覆盖ajaxSetup
中的xhr
功能,甚至可以覆盖每个$.ajax
个人(function() {
var originalXhr = jQuery.ajaxSettings.xhr;
jQuery.ajaxSetup({
xhr: function() {
var req = originalXhr();
if (req) {
// Add your progress handler
}
return req;
}
});
})();
。这在$.ajax
docs (感谢Nick!)。
如果您想要所有时间,您的代码可能看起来像这样(未经测试):
$.ajax({
url: "path/to/resource",
xhr: function() {
var req = $.ajaxSettings.xhr();
if (req) {
// Add your handler here
}
return req;
}
});
...或像这样(live example)仅针对特定请求:
xhr
不幸的是,尽管记录了覆盖jQuery.ajaxSettings.xhr
,但是当前配置的{(1}})的位置似乎不是,因此从技术上讲,您仍然依赖于未记录的功能代码中的jQuery.ajaxSettings.xhr
。你只需要仔细检查每个点发布时是否仍然存在,它可能不会移动太多(jQuery.ajaxSettings
至少提到在文档中,{{3 }})。