使用 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;
}
}
猜你喜欢
- Microsoft® SQL Server™ 2000 由一系列产品组成,不仅能够满足最大的数据处理系统
- 代码如下: Function NumberSplit(num) Dim i,length length=Len(num) For i=1 T
- 今天遇到这个问题,上网查到以下解决方法:1.检查你的磁盘剩余空间是否足够,如果没有磁盘剩余空间,则清理磁盘,腾出空间
- ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可以自己编写COM
- aspjpeg组件官方下载地址:http://www.persits.com/说明: 1、aspjpeg能对图片水印进行透明度调整
- 垃圾评论,垃圾留言,人见人憎,用了验证码,效果也好不到哪里去,还影响用户体验。有的网站甚至不惜牺牲用户体验,而构造强悍的惨不忍睹的超级验证码
- 近日因为升级系统的需要,将旧mysql数据库从3.23升级到5.0.41先从mysql3.23中mysqldump出数据文件data.sql
- 导语:简洁并不等于极简主义,在保持网站简洁的外观的同时,辅以其它元素的使用,同样能够达到要求。那如何做到这一点呢?通过本文你能从中学到一些经
- 通常来说,在MyISAM里读写操作是串行的,但当对同一个表进行查询和插入操作时,为了降低锁竞争的频率,根据concurrent_insert
- 这阵子没有精力完整翻译和发到译言( 现下正渐入状态,预计写博客量会逐步提升回来),简短做一个概要翻译,为近期工作需要做一个参考。
- 先 Create table 吧create table emp(id int not null primary key,name varc
- W3C终于发布了第一个HTML5草案,大家还沉溺在HTML2XHTML转换的快乐和痛苦中时,却又突然发现,HTML5和XHTML2,到底谁是
- 从今天开始,我将全面的共享出我所能理解的所有WEB标准方面的知识放在这个“WEB标准能有多难?”的专栏里。当然由于振之的水平有限,所讲并非是
- 数据库并行访问,也就是两个或两以上用户同时访问同一数据,这也是数据库引擎如何设计和实现适度反应所面临的最大问题。设计优良、性能卓越的数据库引
- 1,FCKeditor 编辑器最新版本: 2.3.1站点:http://www.fckeditor.net 演示:http://w
- SQL Server 6.5作为面向中小型企业的网络数据库服务系统,提供了 与众多高级数据库管理器相同的运行性能,向传统的数据库厂商发起了强
- 如何正确显示数据库里同时存在的GB码和BIG5码? Public Function CheckBIG(strS
- 地图现在太常见了,几乎每天在地铁上都能看到卖地图的小贩,”09年新版北京旅游交通图,1块钱一份”,买的人多半是外地来旅游的,这些人需要地图来
- 网页编程中,在与数据库打交道的时候我们经常会碰到乱码的经常。本文就将介绍一种ASP读取MySQL数据库出现乱码的解决办法。情景再现:使用My
- 一、新手常犯的错误在论坛看到很多帖子代码中都有一个共同的基本错误,字段类型错误。程序和数据库是紧紧相连的,数据库字段文本型或时间型的都使用单