2008-11-20 51 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