检测AJAX / XmlHttpRequest支持的最佳实践

时间:2008-11-20 16:24:04

标签: ajax xmlhttprequest

我正在尝试更新用于检测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支持的真/假的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

不要!

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

尝试抓住jQuery的来源或某些东西并“借用”他们的方法;他们已经投入时间来支持尽可能多的浏览器(尤其是在jQuery的情况下),所以节省时间。

HTH

答案 1 :(得分: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对象的变体添加测试...

答案 2 :(得分: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);

似乎工作如此以为我会分享它。