2011-06-25 54 views
3

當檢查一個特定的瀏覽器是否支持AJAX,目標檢測就是我平時做:的Javascript XMLHttpRequest對象檢測VS在try..catch

if (window.XMLHttpRequest) 
{ 
    xhr = new XMLHttpRequest(); 
} 
else if (window.ActiveXObject) 
{ 
    xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} 

然而,每當我一起來看看由誰是開發人員編寫的代碼更高級,更有可能,我會看到一個try-catch塊來代替:

try { 
    xhr = new ActiveXObject("Microsoft.XMLHTTP"); //IE 
} 
catch(e) // if not IE 
{ 
    xhr = new XMLHttpRequest(); 
} 

我知道有些人說在try..catch比較慢,但是如果這是一個很值得只是喜好的問題,有沒有一個公約/更「標準」的方式來做到這一點?在很長一段時間,當我在innerHTML(非標準)和DOM(標準)之間做出決定時,我也處於相同的情況。感謝您的時間。任何建議,將不勝感激。

回答

1

如何 XHR =新的XMLHttpRequest()||新的ActiveXObject(「Microsoft.XMLHTTP」);優選

的XMLHttpRequest如果失敗,它使用的ActiveXObject( 「Microsoft.XMLHTTP」)。 更加優雅和乾燥。

+0

沒錯,但「優雅」並不意味着「標準」,因爲innerHTML的操作同樣的事情比DOM遍歷「更快」,但不被認爲是「標準」的方式:) –

+0

這更是一個標準的。這與jQuery的做法很相似。而且它是最安全的。 '功能createStandardXHR(){ \t嘗試{ \t \t回報新window.XMLHttpRequest(); \t}趕上(E){}} 功能createActiveXHR(){ \t嘗試{ \t \t回報新window.ActiveXObject( 「Microsoft.XMLHTTP」); \t}趕上(E){}} XHR = window.ActiveXObject? \t函數(){ \t \t返回createStandardXHR()|| createActiveXHR(); \t}: \t createStandardXHR;' –