如何覆盖jQuery';在$.ajax中如何使用XMLHttpRequest?

如何覆盖jQuery';在$.ajax中如何使用XMLHttpRequest?,jquery,ajax,Jquery,Ajax,在打开XMLHttp连接(即xhr.open())之前,我需要addEventListener来侦听进度事件,但是beforeSend方法返回一个已经打开的xhr实例。如何覆盖它以正确添加侦听器 ()您可以在每个$.ajax调用中甚至在每个调用上重写xhr函数。这在文档中有记录(谢谢Nick!) 如果您想一直这样做,您的代码可能看起来像这样(未经测试): (function() { var originalXhr = jQuery.ajaxSettings.xhr; jQuer

在打开XMLHttp连接(即
xhr.open()
)之前,我需要
addEventListener
来侦听
进度
事件,但是
beforeSend
方法返回一个已经打开的xhr实例。如何覆盖它以正确添加侦听器


()

您可以在每个
$.ajax
调用中甚至在每个调用上重写
xhr
函数。这在文档中有记录(谢谢Nick!)

如果您想一直这样做,您的代码可能看起来像这样(未经测试):

(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
。您只需再次检查每个dot版本上是否仍有该设置,它可能不会移动太多(文档中至少提到了
jQuery.ajaxSettings
)。

+1-请注意,它是有文档记录的,最后一个选项:@Nick Craver:我相信他指的是jQuery.ajaxSettings没有自己的文档页面。