第21章 Ajax与comet

1、XMLHttpRequest对象

Ajax能够向服务器请求额外的数据而无须卸载页面,会带来更好的用户体验。
Ajax技术的核心是XMLHttpRequest对象(简称XHR)XHR为向服务器发送请求和解析服务器响应提供了流畅的接口。能够以异步方式从服务器取得更多信息,意味着用户单击后,可以不必刷新页面也能取得新数据。

1.1XMLHttpRequest对象

IES是第一款引人XHR对象的浏览器。在IE5中,XHR对象是通过MSXML库中的一个ActiveX对象实现的

1.1.1XHR的用法

在使用XHR对象时,要调用的第一个方法是 open(),它接受3个参数:要发送的请求的类型( "get"、"post"等)、请求的URL和表示是否异步发送请求的布尔值。下面就是调用这个方法的例子。

xhr.open ( "get" ,"example.php", false};

这行代码会启动一个针对example.php的GET请求。有关这行代码,需要说明两点:一是URL相对于执行代码的当前页面(当然也可以使用绝对路径)二是调用open()方法并不会真正发送请求,而只是启动一个请求以备发送。
☆只能向同一个城中使用相同端口和协议的URL发送请求。如果URL与启动请求的页面有任何差别,都会引发安全错误。
要发送特定的请求,必须像下面这样调用send()方法:

xhr .open i "get" , " example.txt", false) ;
xhr .scnd (null);

由于这次请求是同步的,JavaScript代码会等到服务器响应之后再继续执行。在收到响应后,响应的数据会自动填充XHR对象的属性,相关的属性。
responseText:作为响应主体被返回的文本。
responsexML:如果响应的内容类型是"text/xml"或" application/xml",这个属性中将保存包含着响应数据的XMLDOM文档
status:响应的HTTP状态。
statusText:HTTP状态的说明。

1.1.2HTTP头部信息

每个HTTP请求和响应都会带有相应的头部信息,其中有的对开发人员有用,有的也没有什么用。XHR对象也提供了操作这两种头部(即请求头部和响应头部)信息的方法。
默认情况下,在发送xHR请求的同时,还会发送下列头部信息。
Accept:浏览器能够处理的内容类型。
Accept-Charset:浏览器能够显示的字符集。
Accept-Encoding:浏览器能够处理的压缩编码。
Accept-Language:浏览器当前设置的语言。
connection:浏览器与服务器之间连接的类型。
Cookie:当前页面设置的任何Cookic。
Host:发出请求的页面所在的域。
Referer:发出请求的页面的URI。注意,HTTP规范将这个头部字段拼写错了,而为保证与规范一致,也只能将错就错了。
user-Agent:浏览器的用户代理字符串。
使用setRequestHeader()方法可以设置自定义的请求头部信息。这个方法接受两个参数:头部字段使用setRequestHeader()方法可以设置自定义的请求头部信息。这个方法接受两个参数:头部字段使用setRequestHeader()方法可以设置自定义的请求头部信息。这个方法接受两个参数:头部字段

21.1.3GET请求

GET是最常见的请求类型,最常用于向服务器查询某些信息。必要时,可以将查询字符串参数追加到URL的末尾,以便将信息发送给服务器。

1.1.4POST请求

使用频率仅次于GET的是 POST请求,通常用于向服务器发送应该被保存的数据
2、XMLHttpRequest 2级
XMLHtpRequest 1级只是把已有的XHR对象的实现细节描述了出来。而XMLHtpRequest2级则进一步发展了XHR。

2.1 FormData

FormData为序列化表单以及创建与表单格式相同的数据(用于通过XHR传输)提供了便利。

2.2超时设定

IE8为XHR对象添加了一个timeout属性,表示请求在等待响应多少毫秒之后就终止。

2.3overrideMimeType()方法

用于重写XHR响应的MIME类型。
3、进度事件

1.3进度事件

loadstart:在接收到响应数据的第一个字节时触发。
progress:在接收响应期间持续不断地触发。
error:在请求发生错误时触发。
abort:在因为调用abort()方法而终止连接时触发。
load:在接收到完整的响应数据时触发。
loadend:在通信完成或者触发error、abort或load事件后触发。
4、跨源资源共享
5、其他跨域技术

Comet

Comet是Alex Russell发明的一个词儿,指的是-种更高级的Ajax技术(经常也有人称为“服务器推送”)。Ajax是一种从页面向服务器请求数据的技术,而Comet则是一种服务器向页面推送数据的技术。Comet能够让信息近乎实时地被推送到页面上,非常适合处理体育比赛的分数和股票报价。有两种实现Comet的方式:长轮询和流。长轮询是传统轮询(也称为短轮询)的一个翻版,即浏览器定时向服务器发送请求,看有没有更新的数据。

6、安全

为确保通过XHR访问的URL安全,通行的做法就是验证发送请求者是否有权限访向相应的资源有下列几种方式可供选择。
要求以SSL连接来访问可以通过XHR请求的资源。
要求每一次请求都要附带经过相应算法计算得到的验证码请注意,下列措施对防范CSRF攻击不起作用。
要求发送POST而不是GET请求——很容易改变。
检查来源URL以确定是否可信——来源记录很容易伪造。
基于cookie信息进行验证——同样很容易伪造。

7、小结

Ajax是无需刷新页面就能够从服务器取得数据的一种方法。关于 Ajax,可以从以下几方面来总结一下。
负责Ajax运作的核心对象是XMLHttpRequest ( XHR)对象。
XHR对象由微软最早在IE5中引人,用于通过JavaScript从服务器取得XML数据。
在此之后,Firefox、Safari、Chrome和Opera都实现了相同的特性,使XHR成为了Web的一个事实标准。
虽然实现之间存在差异,但XHR对象的基本用法在不同浏览器间还是相对规范的,因此可以放心地用在Web开发当中。

你可能感兴趣的:(第21章 Ajax与comet)