2008-11-20 2 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 или somesuch и «заимствовать» их методы; они уже вложили время на поддержку как можно большего числа браузеров (особенно в случае с jQuery), поэтому экономьте время.

НТН

+0

Вот как это работает jQuery, хотя я не уверен, что это лучший способ его изменить, чтобы он возвращал логическое значение. var xhr = window.ActiveXObject? новый ActiveXObject («Microsoft.XMLHTTP»): новый 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; 
} 

Вы можете легко добавить тесты для вариантов объектов Microsoft ...

+0

Есть ли способ сделать эквивалент, но без try/catch? – tjrobinson 2008-11-20 16:40:28