首页 > 代码库 > XMLHttpRequest

XMLHttpRequest

所有浏览器都在一个叫XMLHttpRequest的类上定义他们的HTTP API。这个类的每一个实例表示一个request/response对,它的属性和方法可以让你执行请求的细节,可以让你解析出相应数据。XMLHttpRequest已经被浏览器支持很多年了,最终定下来的API通过了W3C。同时,W3C在进行“XMLHttpRequest Leval 2”的草案。这一节讲述核心XMLHttpRequest API,Leval 2 draft的有些部分目前已经至少被两个浏览器实现,我们这一节也将讲述他们。我们称Leval 2 draft为XHR2。

首先要做的,是实例化一个XMLHttpRequest对象。
var request = new XMLHttpRequest();
你可以重新使用一个已经存在的XMLHttpRequest对象,但是注意这样做,会abort pending在对象中的请求。
一个HTTP请求由四部分组成:
HTTP请求方法或者“verb”
请求URL
可选请求头选项,可能包含认证信息
可选请求体
HTTP响应有三部分
一个数字状态码,用来指示请求成功与否
一些响应头
响应body

下面的头两小节,演示了如何设置HTTP请求,如何查询HTTP响应。


XMLHttpRequest对象可以让客户端JS向web服务器发送HTTP请求并接收响应(响应不必是XML)。XMLHttpRequest是18章的主题,那里有很多它的示例。
new一个XMLHttpRequest对象,请查看补充材料,了解如何在IE6上创建XMLHttpRequest对象。
调用open(),指定url和method(一般是“GET”或“POST”)
对象的onreadystatechange属性是个钩子函数(事件处理函数),可以用来获得请求的进度
调用setRequestHeader(),如果需要的话,指定额外的请求参数
send()。开始send。onreadystatechange事件处理函数将被调用。当readyState是4的时候,请求完成。
当readyState是4,检查status确保请求成功。如果成功,使用getResponseHeader()或者getResponseHeaders()接收响应的header,还有,使用responseText或者responseXML属性获取响应体。

属性
unsigned long timeout
这个XHR2属性指定一个毫秒的超时值。如果HTTP请求超过这个时间还没有完成,它将被终止,并且,一个timeout事件将被触发。该值只能在调用open之后调用send之前设置。

方法
void open(string method, string url, [boolean async, string user, string pass])
这个方法重置XMLHttpRequest对象,保存它的参数,供随后的send()方法使用。
async参数默认是true,如果async参数设置成false,该请求是同步的,这种情况下send方法阻塞直到响应完成。不推荐设成false,除非在Worker当中使用XMLHttpRequest。

可选的user和pass参数,用来验证

void send(any body)
如果之前的open()调用的async参数是false的话,这个方法阻塞,直到readyState为4,此时,服务器的响应完全被接收到了。否则,send()立刻返回,服务器的响应被异步的处理,通过事件处理者提供的通知。

事件处理者
ontimeout
如果指定的超时事件过去后,响应还没有完成,则触发。

XMLHttpRequest