js中的XMLHttpRequest对象
介绍
- XMLHttpRequest对象是
ajax技术的核心。 - JavaScript通过这个对象可以自己发送请求,同时也自己处理响应。
- 得到了几乎所有现代浏览器的支持。
兼容性
微软最早在IE5中以ActiveX对象的形式实现了一个名叫XMLHTTP的对象。在IE中创建新的对象要使用下列代码:
1 | var request = new ActiveXObject('Msxml2.XMLHTTP.3.0'); |
其他浏览器则基于XMLHttpRequest来创建新对象:
1 | var request = new XMLHttpRequest(); |
更麻烦的是,不同IE版本中使用的XMLHTTP对象也不完全相同。为了兼容所有浏览器,这样写:
1 | function getHTTPObject() { |
open方法
XMLHttpRequest对象的HTTP和HTTPS请求必须通过opent方法初始化。这个方法必须在实际发送请求之前调用,以用来验证请求方法,URL以及用户信息。这个方法不能确保URL存在或者用户信息必须正确。初始化请求可以接受5个参数,一般常用前3个参数:
1 | open( Method, URL, Asynchronous, UserName, Password ) |
- 第一个参数是
请求方法,如下
- GET (IE7+,Mozilla 1+)
- POST (IE7+,Mozilla 1+)
- HEAD (IE7+)
- PUT
- DELETE
- OPTIONS (IE7+)
使用POST请求的方法的话,需要发送合适的请求头信息,例子:
1 | request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
- 第二个参数是string类型,
标示请求的URL。 - 第三个参数是boolean类型,
用于指定请求是否以异步方式发送和处理。 - 第四个参数是string类型,指定
用户名。 - 第五个参数是string类型,指定
密码。
onreadystatechange事件处理函数
它会在服务器给XMLHttpRequest对象送回响应的时候被触发执行。
将自动在XMLHttpRequest对象的readyState属性改变时被触发。
readyState 属性
服务器在向XMLHttpRequest对象发回响应时,该对象有许多属性可用,浏览器会在不同阶段更新readyState属性的值,它有5个可能的值:
- 0 表示未初始化
- 1 表示正在加载
- 2 表示加载完毕
- 3 表示正在交互
- 4 表示完成
只有readyState属性的值变成了4,就可以访问服务器发送回来的数据了。
status属性
代表请求的响应状态,如200,404等。
send方法
向服务器发送请求,默认发送的null。
1 | request.send(null) |
send方法也可以发送参数,但仅限post请求才行,get请求发送参数需要在open里面的第二个参数里的请求地址后面添加。下面举个例子:
get请求发送参数
1 | var xhr = new XMLHttpRequest() |
post请求发送参数
1 | var request = new XMLHttpRequest() |
内容部分参考自《JavaScript DOM 编程艺术》