2008-11-20 47 views
0

我试图更新一个旧的JavaScript函数来检测对AJAX(即XmlHttpRequest对象)的支持。我在网上查看过(包括SO),并找到了各种解决方案,但我不确定哪种方法对于简单检测支持最有效。检测AJAX/XmlHttpRequestSupport的最佳实践

当前功能是:

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支持的真/假的最佳方式是什么?

回答

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); 

它似乎工作,所以认为我会分享它。

1

不要!

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

试着抓住jQuery或somewhere的来源和“借用”他们的方法;他们已经投入了时间来支持尽可能多的浏览器(特别是在jQuery的情况下),所以节省时间。

HTH

+0

这是jQuery如何做到的,尽管我不确定改变它的最好方法,以便它返回一个布尔值。 var xhr = window.ActiveXObject?新的ActiveXObject(“Microsoft.XMLHTTP”):new XMLHttpRequest(); – tjrobinson 2008-11-20 16:41:45

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; 
} 

您可以轻松地添加测试微软对象的变种...

+0

有没有办法做同样的事情,但没有尝试/捕获? – tjrobinson 2008-11-20 16:40:28