2

在我检查过的所有 AJAX 库中,XMLHttpRequest 涉及一个带有测试或 try/catch 语句的冗长声明。

我需要通过 SOAP GET 请求检索 XML,并在 IE7+、Firefox 和 Chrome 中成功测试了以下声明:

var xhr=new XMLHttpRequest()||new ActiveXObject("Microsoft.XMLHTTP");

我在这里想念什么?我是否忽略了一些我的声明将被打破的边缘情况?

编辑

所以声明的第二部分永远不会运行。这是否意味着对于 IE7+/Firefox/Chrome 我只需要:

var xhr=new XMLHttpRequest();
4

2 回答 2

3

你会错过低于 7 的 Internet Explorer 版本的案例:

new ActiveXObject("MSXML2.XMLHTTP");

我认为拥有一个函数createRequest(),例如,您不必修改并根据浏览器返回好的对象,并且包含 try/catch 来处理错误将是一种更好的方法。

于 2011-12-12T21:07:23.960 回答
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
于 2011-12-12T21:07:04.967 回答