0

我正在尝试更新用于检测 AJAX 支持的旧 JavaScript 函数(即 XmlHttpRequest 对象)。我在网上查看(包括 SO)并找到了各种解决方案,但我不确定哪种方法对于简单地检测支持最有效。

目前的功能是:

    function IsSyncAJAXSupported()
    {
        var isSyncAJAXSupported = true;

        var xmlHttp = null;
        var clsids = ["Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
        for(var i=0; i<clsids.length && xmlHttp == null; i++) {
            try {
                    xmlHttp = new ActiveXObject(clsids[i]);
            } catch(e){}
        }

        if(xmlHttp == null && MS.Browser.isIE)
        {
            isSyncAJAXSupported = false;
        }
        return isSyncAJAXSupported;
    }

在 Firefox 3 中,上面给出了错误,因为 MS 未定义。

我意识到使用图书馆会更好,但这不是短期的选择。我们仅支持 IE6 及以上版本 + 最新版本的 Firefox、Safari/WebKit 和 Opera。

获得 XmlHttpRequest 支持的真/假的最佳方法是什么?

4

3 回答 3

1

不!

或者更确切地说,不要浪费时间做许多其他人做得更好的事情。

尝试获取 jQuery 或类似的源代码并“借用”他们的方法;他们已经投入了时间来支持尽可能多的浏览器(尤其是在 jQuery 的情况下),所以节省自己的时间。

高温高压

于 2008-11-20T16:29:05.690 回答
1

我的首选代码是:

function CreateXMLHttpRequest()
{
  // Firefox and others
  try { return new XMLHttpRequest(); } catch (e) {}
  // Internet Explorer
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  //alert("XMLHttpRequest not supported");
  // No luck!
  return null;
}

您可以轻松地为 Microsoft 对象的变体添加测试...

于 2008-11-20T16:30:47.357 回答
0

我想出了这个:

var xhr = null;
try { xhr = new XMLHttpRequest(); } catch (e) {}
try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
return (xhr!=null);

它似乎有效,所以我想分享它。

于 2008-11-20T17:09:21.367 回答