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

前端之家收集整理的这篇文章主要介绍了如何在$.ajax中覆盖jQuery对XMLHttpRequest的使用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要addEventListener在打开XMLHttp连接之前侦听progress事件(即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文档中有记录(感谢尼克!).

如果您想要始终执行此操作,您的代码可能看起来像这样(未经测试):

  1. (function() {
  2. var originalXhr = jQuery.ajaxSettings.xhr;
  3. jQuery.ajaxSetup({
  4. xhr: function() {
  5. var req = originalXhr();
  6. if (req) {
  7. // Add your progress handler
  8. }
  9. return req;
  10. }
  11. });
  12. })();

…或像这样(live example)仅针对特定请求:

  1. $.ajax({
  2. url: "path/to/resource",xhr: function() {
  3. var req = $.ajaxSettings.xhr();
  4. if (req) {
  5. // Add your handler here
  6. }
  7. return req;
  8. }
  9. });

不幸的是,尽管记录了覆盖xhr,但是当前配置的位置(jQuery.ajaxSettings.xhr)似乎并不存在,所以从技术上讲,你依旧使用jQuery.ajaxSettings.xhr来依赖于未记录的功能.码.你只需要仔细检查每个点发布时是否仍然存在,它可能不会过多地移动(并且jQuery.ajaxSettings至少在文档中提到,here).

猜你在找的Ajax相关文章