创建具有错误处理能力及多种浏览器通用的 XMLHttpRequest对象
2007-06-21 10:40
761 查看
<script language="javascript" type="text/javascript">
var request = false;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
</script>
很容易被这些花括号迷住了眼睛,因此下面分别介绍每一步:
创建一个新变量
增加 try/catch 块:
尝试创建
如果失败(
尝试使用较新版本的 Microsoft 浏览器创建 Microsoft 兼容的对象(
如果失败(
如果失败(
检查
如果出现问题(
关于 Ajax 和 Microsoft 对该领域不断增长的兴趣和参与已经有很多文章进行了介绍。事实上,据说 Microsoft 最新版本的 Internet Explorer —— version 7.0,将在 2006 年下半年推出 —— 将开始直接支持
注意,所有以上代码都直接嵌套在
将 XMLHttpRequest 创建代码移动到方法中并调用该方法
<script language="javascript" type="text/javascript">
var request;
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
}
function getCustomerInfo() {
createRequest();
// Do something with the request variable
}
</script>
此代码惟一的问题是推迟了错误通知,这也是多数 Ajax 程序员不采用这一方法的原因。假设一个复杂的表单有 10 或 15 个字段、选择框等,当用户在第 14 个字段(按照表单顺序从上到下)输入文本时要激活某些 Ajax 代码。这时候运行 getCustomerInfo() 尝试创建一个 XMLHttpRequest 对象,但(对于本例来说)失败了。然后向用户显示一条警告,明确地告诉他们不能使用该应用程序。但用户已经花费了很多时间在表单中输入数据!这是非常令人讨厌的,而讨厌显然不会吸引用户再次访问您的网站。
如果使用静态 JavaScript,用户在点击页面的时候很快就会看到错误信息。这样也很烦人,是不是?可能令用户错误地认为您的 Web 应用程序不能在他的浏览器上运行。不过,当然要比他们花费了 10 分钟输入信息之后再显示同样的错误要好。因此,我建议编写静态的代码,让用户尽可能早地发现问题。
var request = false;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
</script>
很容易被这些花括号迷住了眼睛,因此下面分别介绍每一步:
创建一个新变量
request并赋值 false。使用 false 作为判断条件,它表示还没有创建
XMLHttpRequest对象。
增加 try/catch 块:
尝试创建
XMLHttpRequest对象。
如果失败(
catch (trymicrosoft)):
尝试使用较新版本的 Microsoft 浏览器创建 Microsoft 兼容的对象(
Msxml2.XMLHTTP)。
如果失败(
catch (othermicrosoft))尝试使用较老版本的 Microsoft 浏览器创建 Microsoft 兼容的对象(
Microsoft.XMLHTTP)。
如果失败(
catch (failed))则保证
request的值仍然为 false。
检查
request是否仍然为 false(如果一切顺利就不会是 false)。
如果出现问题(
request是 false)则使用 JavaScript 警告通知用户出现了问题。
关于 Ajax 和 Microsoft 对该领域不断增长的兴趣和参与已经有很多文章进行了介绍。事实上,据说 Microsoft 最新版本的 Internet Explorer —— version 7.0,将在 2006 年下半年推出 —— 将开始直接支持
XMLHttpRequest,让您使用
new关键字代替所有的
Msxml2.XMLHTTP创建代码。但不要太激动,仍然需要支持旧的浏览器,因此跨浏览器代码不会很快消失。
注意,所有以上代码都直接嵌套在
script标记中。像这种不放到方法或函数体中的 JavaScript 代码称为静态 JavaScript。就是说代码是在页面显示给用户之前的某个时候运行。(虽然根据规范不能完全精确地 知道这些代码何时运行对浏览器有什么影响,但是可以保证这些代码在用户能够与页面交互之前运行。)这也是多数 Ajax 程序员创建
XMLHttpRequest对象的一般方式。
将 XMLHttpRequest 创建代码移动到方法中并调用该方法
<script language="javascript" type="text/javascript">
var request;
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
}
function getCustomerInfo() {
createRequest();
// Do something with the request variable
}
</script>
此代码惟一的问题是推迟了错误通知,这也是多数 Ajax 程序员不采用这一方法的原因。假设一个复杂的表单有 10 或 15 个字段、选择框等,当用户在第 14 个字段(按照表单顺序从上到下)输入文本时要激活某些 Ajax 代码。这时候运行 getCustomerInfo() 尝试创建一个 XMLHttpRequest 对象,但(对于本例来说)失败了。然后向用户显示一条警告,明确地告诉他们不能使用该应用程序。但用户已经花费了很多时间在表单中输入数据!这是非常令人讨厌的,而讨厌显然不会吸引用户再次访问您的网站。
如果使用静态 JavaScript,用户在点击页面的时候很快就会看到错误信息。这样也很烦人,是不是?可能令用户错误地认为您的 Web 应用程序不能在他的浏览器上运行。不过,当然要比他们花费了 10 分钟输入信息之后再显示同样的错误要好。因此,我建议编写静态的代码,让用户尽可能早地发现问题。
相关文章推荐
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 以支持多种浏览器的方式创建XMLHttpRequest对象
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 检查浏览器创建XMLHttpRequest对象
- 如何在HTML页面中创建兼容不同浏览器的XMLHttpRequest对象
- 解析ajax核心XMLHTTPRequest对象的创建与浏览器的兼容问题
- 创建通用XMLHttpRequest对象
- Ajax处理XML,XMLHttpRequest对象的创建和访问servlet并返回xml数据到页面展示
- 创建跨浏览器访问的 XMLHttpRequest 对象
- 根据浏览器选择创建XMLHttpRequest对象
- JS创建Ajax的XMLHttpRequest对象的通用方法
- 根据浏览器选择创建XMLHttpRequest对象
- 创建针对不同浏览器的XMLHttpRequest对象,异步校验
- 解析ajax核心XMLHTTPRequest对象的创建与浏览器的兼容问题
- 在 Microsoft 浏览器上创建 XMLHttpRequest 对象
- Ajax创建XMLHttpRequest对象通用方法