我正在尝试更新用于检测AJAX支持的旧JavaScript函数(即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。
获取XmlHttpRequest支持的真/假的最佳方法是什么?
答案 0 :(得分:1)
不要!
或者更确切地说,不要浪费时间去做许多其他人做得更好的事情。
尝试抓住jQuery的来源或某些东西并“借用”他们的方法;他们已经投入时间来支持尽可能多的浏览器(尤其是在jQuery的情况下),所以节省时间。
HTH
答案 1 :(得分: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对象的变体添加测试...
答案 2 :(得分: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);
似乎工作如此以为我会分享它。