我需要addEventListener
来监听progress
事件在打开XMLHttp连接(即xhr.open()
),但是 beforeSend
方法返回一个已经打开的 xhr 实例。我如何覆盖它以正确添加监听器?
最佳答案
您可以覆盖ajaxSetup
中的xhr
函数甚至在每个单独的 $.ajax
调用上。这记录在 $.ajax
中文档(感谢尼克!)。
如果您想一直执行此操作,您的代码可能如下所示(未经测试):
(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
)似乎没有记录,所以从技术上讲,您通过在代码中使用 jQuery.ajaxSettings.xhr
仍然依赖于未记录的功能。您只需要仔细检查每个点版本中是否仍然存在,它可能不会移动太多(并且 jQuery.ajaxSettings
至少提到文档,here)。
关于jquery - 如何在 $.ajax 中覆盖 jQuery 对 XMLHttpRequest 的使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303448/