jquery - 如何在 $.ajax 中覆盖 jQuery 对 XMLHttpRequest 的使用?

标签 jquery ajax

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

( Note: You need to add the event listeners before calling open() on the request. Otherwise the progress events will not fire. )

最佳答案

您可以覆盖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/

相关文章:

javascript - 如何使用for循环添加所有按钮的点击事件?

jquery - 防止双击缩略图以确保内容不会通过 AJAX 加载两次

javascript - AJAX 查询没有正确引用变量

javascript - asp.net-mvc ajax json post 到 Controller 操作方法

javascript - 如何在提交前添加确认框

jQuery 下拉菜单 - CSS 问题

javascript - 绑定(bind)已经绑定(bind)到另一个元素的函数

javascript - 无法读取ajax中未定义的属性 'length'

jquery - jQuery Mobile 中页面中心的 GridView

javascript - in_Array 在每个带有字符串的循环中返回 -1