使用 XML HTTP Request 对象[翻译]
作者:子乌 来源:子乌的叶子 发布时间:2007-11-07 21:11:00
译者:Sheneyan(子乌)
时间:2006.1.29
英文原文:http://jibbering.com/2002/4/httprequest.html
子乌注:这篇文章我想看过的人很多,翻译的版本也有许多,我之所以要再来翻译一次,是因为这篇文章的时效性(看下一段作者说明),以及文字的优雅。文字的时效性,它居然是2006年1月再次更改的版本,也就是说,我也许就是第一个翻译这个版本的人哦:P。文字的优雅,有能力、有空还是得看看原文,那英文的美感,在类似的技术文章中算很少见的(也许是我少见多怪,等我看多了就不会这样了~)
这篇文章写于2002年4月,由于这个对象最终会变得越来越流行,我已经决定修改并更新这篇文章。2002版仍然可以在线阅读,同样的还有2004年9月版和2005年8月版。你正在阅读的是2006年1月版。
在windows上的Internet Explorer,Mac OS-X上的Safari,跨平台的Mozilla,KDE上的Konqueror,Java写的IceBrowser,以及另一个跨平台的Opera(包括Symbian)都为客户端的javascript脚本提供了一个方法来产生HTTP请求。卑微的出身和少许推崇者的古怪命名,最终成长为在某些领域里的核心技术,它叫作“AJAX”(欣赏一下原文:From the humble begins as an oddly named object with few admirers, it's blossomed to be the core technology in something called AJAX)。
这个对象让许多事情变得比原来优雅、简洁,并引入了一些在其他方面也一样重要的东西,比如HEAD请求来看一个资源的最后修改时间,或者只是看它是否存在。它让你的编码(scripting?)的选择更加灵活,允许POST提交,比如PUT、DELETE等等操作的可能性而不需要页面的改变。这些方法日益广泛地应用于创建类似G-Mail的更强大提供更迅捷(snappier)用户界面却使用更少带宽的web应用程序。
为什么叫做“XML”HTTP Request对象?
虽然这个对象被叫做“XML HTTP Request对象”,但它并不只局限于使用XML,它能够请求或发送任何类型的文档,虽然对于javascript来说,处理二进制流很成问题。
创建对象
在Internet Explorer里,你通过new ActiveXObject("Msxml2.XMLHTTP")或new ActiveXObject("Microsoft.XMLHTTP")(取决于安装的MSXML版本)来创建这个对象。在Mozilla和Sarafi中(以及未来支持这个对象的类似它们俩的浏览器(UA,User Agent)),你使用new XMLHttpRequest(),而IceBrowser使用另外一个方法:window.createRequest()。
这意味着你需要在不同的浏览器上展现不同的脚本(子乌注:小小抱怨一句,我还是觉得这点小小麻烦比起css的兼容来说,简单多了。。。。这只是个人看法,也许过几个月,我熟悉了css,就不会发这种牢骚了~),在一个浏览器上能够干得好好的代码,在另外一个上面八成会出错。下面的脚本解决了这个问题,而且如果它不支持,变量将被设置为false并允许恰当的错误信息,并在这个对象不可用的时候降低要求(degradtion),使用其他普通的http传输方法。留有后路是很重要的,即使在ie中,这个对象也经常由于安全设置的略微修改(通常是由于ie的入侵漏洞造成的)而被禁止。当你真的无法实现功能的时候而需要提供低等级的支持时,底下是一些方法。我建议是提供另一个变通的页面。比如GMail许诺说他们在未来(子乌注:呃。。。这文章是2002年写的,那时候gmail还没实现该功能)会提供一个更安全的版本,很有可能是完全没有javascript--完全的退化。
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript提供的条件编译让我们能够应付旧的ie版本,以及由于安全原因无法创建对象
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp=false;
}
}
if (!xmlhttp && window.createRequest) {
try {
xmlhttp = window.createRequest();
} catch (e) {
xmlhttp=false;
}
}
猜你喜欢
- 一、Pycharm下载与安装附:Python、Pycharm和Anaconda的关系:Python是一种解释型、面向对象、动态数据类型的高级
- 本文实例为大家分享了python3实现ftp服务功能的具体代码,供大家参考,具体内容如下客户端 main代码:#Author by Andy
- 问题,用python生成如下所示的1000个txt文件?解答:import osfor i in range(0,1001): os.mkn
- 介绍UliPad是一个国人开发的python轻量级编辑器,导向和灵活的编程器。它如类浏览器,代码自动完成许多功能,如:HTML查看器,目录浏
- 我们在编写 JS 代码时,经常会遇到逻辑判断复杂的情况。一般情况下,可以用 if/else 或 switch 来实现多个条件判断,但会出现一
- 一、数据库介绍1、为什么要学习数据库通常,我们存储数据,直接用本地文件即可,但是,本地文件不利于存放海量数据,也不利于用程序对文件的数据进行
- 内容摘要:Microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问SQL Server服务器系统和数据库的安全进行
- 前篇我们稍微学习了Python中时间的获取,这次继续学习日期的时区转换,格式化等等。开发中常用的日期操作还有哪些?时区转换显示日期格式化秒数
- GoLang调试工具Delve1.先获取呗:go get -u github.com/derekparker/delve/cmd/dlv2.
- Python的装饰器可以实现在代码运行期间修改函数的上下文, 即可以定义函数在执行之前进行何种操作和函数执行后进行何种操作, 而函数本身并没
- 基本配置(萌新看,大佬请跳到下一节)1、创建项目点击Create New Project创建新的项目,点击Open打开已有的项目。先选择左侧
- 最近网站访问量大增,可能有些频道程序也有一些问题,造成了MySQL数据库出现Forcing close of thread 28790 us
- 检查bug的步骤1. bug定位在js脚本中,按照脚本执行的顺序,你可以用console或alert,来确定bug发生的代码区间,然后在区间
- 由于在Python2 中的默认编码为ASCII,但是在Python3中的默认编码为UTF-8。问题:所以在使用np.load(det.npy
- 本文实例讲述了php利用cookies实现购物车的方法。分享给大家供大家参考。具体分析如下:php购物车是在电子商务网站会用到的,一种像超市
- 本文实例讲述了go语言里包的用法。分享给大家供大家参考。具体分析如下:每个 Go 程序都是由包组成的。程序运行的入口是包 main。这个程序
- 本文实例讲述了JavaScript实现的伸展收缩型菜单代码。分享给大家供大家参考。具体如下:运行效果截图如下:具体代码如下:<html
- 题目描述682. 棒球比赛你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛
- 本文实例讲述了JS实现网页滚动条感应鼠标变色的方法。分享给大家供大家参考。具体实现方法如下:<html><head>
- 什么是浮动?浮动是 css 的定位属性。我们可以看一下印刷设计来了解它的起源和作用。印刷布局中,文本可以按照需要围绕图片。一般把这种方式称为