在我检查过的所有AJAX库中,XMLHttpRequest涉及一个带有tests或try / catch语句的冗长声明。
我需要通过SOAP GET请求检索XML,并且我在IE7 +,Firefox和Chrome中成功测试了以下声明:
var xhr=new XMLHttpRequest()||new ActiveXObject("Microsoft.XMLHTTP");
我在这里缺少什么?我是否忽略了我的宣言将会破裂的一些边缘案例?
修改
因此声明的第二部分永远不会运行。这是否意味着对于IE7 + / Firefox / Chrome我只需要:
var xhr=new XMLHttpRequest();
答案 0 :(得分:3)
你会错过Internet Explorer版本低于7的情况:
new ActiveXObject("MSXML2.XMLHTTP");
我认为有一个函数createRequest()
,例如你不必根据浏览器修改并返回好的对象,并且包含try / catch来处理错误将是一个更好的方法。< / p>
答案 1 :(得分:1)
new
具有优先权,因此您正在执行new XMLHttpRequest()
并检查返回值。但是,如果未定义XMLHttpRequest
,则此执行已经引发错误。相反,您想在应用XMLHttpRequest
之前检查new
是否已定义,例如:
var xhr = typeof XMLHttpRequest === "undefined"
? new ActiveXObject("Microsoft.XMLHTTP")
: new XMLHttpRequest; // you can leave out the parens with no arguments