Лучшие практики для обнаружения AJAX / XmlHttpRequestSupport - PullRequest
0 голосов
/ 20 ноября 2008

Я пытаюсь обновить старую функцию JavaScript, используемую для обнаружения поддержки AJAX (то есть объект 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.

Какой лучший способ получить значение true / false для поддержки XmlHttpRequest?

Ответы [ 3 ]

1 голос
/ 20 ноября 2008

Мой предпочтительный код для этого:

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 ...

1 голос
/ 20 ноября 2008

Не!

Вернее, не тратьте время на то, что многие другие сделали лучше.

Попробуйте захватить источник jQuery или somesuch и "позаимствовать" их методы; они уже потратили время на поддержку как можно большего числа браузеров (особенно в случае jQuery), поэтому сэкономьте время.

НТН

0 голосов
/ 20 ноября 2008

Я придумал это:

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

Кажется, это работает, поэтому думал, что я поделюсь им.

...