Рекомендации по обнаружению AJAX/XmlHttpRequestSupport
-
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 ...