Рекомендации по обнаружению AJAX/XmlHttpRequestSupport

StackOverflow https://stackoverflow.com/questions/305894

  •  08-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь обновить старую функцию 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

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

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

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

Другие советы

Не!

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

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

ХТХ

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top