【问题标题】:Ajax call: What is the difference between new ActiveXObject("Msxml2.XMLHTTP") and new ActiveXObject("Microsoft.XMLHTTP")?Ajax 调用:new ActiveXObject("Msxml2.XMLHTTP") 和 new ActiveXObject("Microsoft.XMLHTTP") 有什么区别?
【发布时间】:2011-06-10 16:29:50
【问题描述】:

我希望两个对象调用都引用 ActiveXObject。 但是为什么我们要传递两个不同的参数来在 IE 中工作。 1. Msxml2.XMLHTTP 和 2.Microsoft.XMLHTTP

他们都一样吗?或者它们是否依赖于浏览器(IE7 和 IE8)?

我都用过。我没有得到任何例外。两者对我来说都是一样的。我使用的是 IE 8。

【问题讨论】:

    标签: ajax activexobject


    【解决方案1】:

    两者实际上都已过时。微软古老的 MSXML ActiveX 对象有多种版本(我相信最后一个版本是 5.0 版,并附带了某些版本的 Office。)这些版本在行为上有细微差别,并且错误修复通常不会在 AJAX 场景中发挥作用.

    从 IE7 开始,Microsoft 支持其他现代浏览器采用的标准化“XmlHttpRequest”对象。见http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx。您绝对应该使用它,因为 IE7 现在是事实上的最低公分母。大多数主要组织已宣布 IE6 已死,因此没有理由支持旧的 Microsoft 特定 ActiveX ProgID。

    当然,现在几乎没有理由推出自己的 AJAX 调用,因为像 jQuery 和 ASP.NET Ajax 之类的库会为你做这件事,抽象出这些晦涩的浏览器怪癖。我强烈建议学习其中一个库。

    乔丹·里格

    【讨论】:

      【解决方案2】:

      jquery(至少 1.4.2)在调用 $.ajax() 时出现问题。它会造成很大的内存泄漏(如喷泉) 悲剧代码:

      if ( window.ActiveXObject ) {
          jQuery.ajaxSettings.xhr = function() {
              if ( window.location.protocol !== "file:" ) {
                  try {
                      return new window.XMLHttpRequest();
                  } catch(xhrError) {}
              }
      
              try {
                  return new window.ActiveXObject("Microsoft.XMLHTTP");
              } catch(activeError) {}
          };
      }
      

      分辨率:

      if ( window.ActiveXObject ) {
          jQuery.ajaxSettings.xhr = function() {
              if ( window.location.protocol !== "file:" ) {
                  if ( window.ActiveXObject ) {
                      try {
                          return new window.ActiveXObject("Microsoft.XMLHTTP");
                      } catch (e) {}
                  }
                  try {
                      return new window.XMLHttpRequest();
                  } catch(xhrError) {}
              }
      
              try {
                  return new window.ActiveXObject("Microsoft.XMLHTTP");
              } catch(activeError) {}
          };
      }
      

      【讨论】:

      • 您的分辨率不需要内部 ActiveXObject 检查。永远都是真的。
      • 这是如何检查 ActiveXObject if('ActiveXObject' in window){return new ActiveXObject("Microsoft.XMLHTTP")}
      猜你喜欢
      • 1970-01-01
      • 2010-12-08
      • 2018-08-02
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2012-12-29
      • 2017-10-31
      相关资源
      最近更新 更多