XMLHttpRequest(XHR)
Ø 浏览器可以直接从JavaScript中初始化请求并获取结果。
Ø 本质上是添加了额外的用于发送和接收XML代码功能的普通HTTP请求。
Ø 像一个 ServletRequest
XMLHttpRequest对象的属性和事件
Ø XMLHttpRequest对象的属性
属性名称 | 描述 |
onreadystatechange | 指定当readyState属性改变时的事件处理句柄,只写 。 |
readyState | 返回当前请求的状态,只读。 |
responseBody | 将回应信息正文以unsigned byte数组形式返回,只读。 |
responseStream | 以Ado Stream对象的形式返回响应信息,只读 。 |
responseText | 将响应信息作为字符串返回,只读 。 |
responseXML | 将响应信息格式化为Xml Document对象并返回,只读 。 |
status | 返回当前请求的http状态码,只读 。 |
statusText | 返回当前请求的响应行状态,只读 。 |
XMLHttpRequest对象的方法
Ø XMLHttpRequest对象的方法
方法名称 | 描述 |
abort | 取消当前请求 |
getAllResponseHeaders | 获取响应的所有http头 |
getResponseHeader | 从响应信息中获取指定的http头 |
open | 创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码) //常用 |
send | 发送请求到http服务器并接收回应 //常用 |
setRequestHeader | 单独指定请求的某个http头 |
XMLHttpRequest对象的readyState属性
Ø ReadyState属性
属性名称 | 描述 |
0 (未初始化) | 对象已建立,但是尚未初始化(尚未调用open方法) |
1 (初始化) | 对象已建立,尚未调用send方法 |
2 (发送数据) | send方法已调用,但是当前的状态及http头未知 |
3 (数据传送中) | 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误 |
4 (完成) | 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 |
XMLHttpRequest对象的onreadystatechange事件
Ø 每个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript 函数。
Ø 语法
onreadystatechang 指定当readyState属性改变时的事件处理句柄,只写 xmlHttpObj.onreadystatechange=callback; function callback (){ if(xmlHttpObj.readyState==4){ if(xmlHttpObj.stateus==200){ alert(xmlHttpObj.responseText); }else{ alert("加载失败!"n原因:"+xmlHttpObj.stateText); } } } |
XMLHttpRequest对象的responseText属性
Ø 服务器的响应,表示为一个串。
Ø 客户端接收到的HTTP响应的文本内容。
Ø 当readyState值为0、1或2时,responseText包含一个空字符串。
Ø 当readyState值为3(正在接收)时,响应中包含客户端还未完成的响应信息。
Ø 当readyState为4(已加载)时,该responseText包含完整的响应信息。
XMLHttpRequest对象的responseXML属性
Ø 服务器的响应,表示为XML。
Ø 用于当接收到完整的HTTP响应时(readyState为4)描述XML响应。
Ø Content-Type头部指定MIME(媒体)类型为text/xml,application/xml或以+xml结尾。
Ø 如果Content-Type头部并不包含这些媒体类型之一,那么responseXML的值为null。
Ø 无论何时,只要readyState值不为4,那么该responseXML的值也为null。
Ø responseXML可以返回一个文档树(DOM),可以使用document.getElementsByTagName,document.getElementsByTagNameNS,document.getElementById等对其操作。
XMLHttpRequest对象的status属性
Ø 长整形标准http状态码。
Ø 仅当readyState值为3(正在接收中)或4(已加载)时,这个status属性才可用。
Ø 当readyState的值小于3时试图存取status的值将引发一个异常。
Ø 状态码如下定义:
值 | 描述 |
100 | Continue |
101 | Switching protocols |
200 | OK |
201 | Created |
202 | Accepted |
203 | Non-Authoritative Information |
204 | No Content |
205 | Reset Content |
206 | Partial Content |
300 | Multiple Choices |
301 | Moved Permanently |
302 | Found |
303 | See Other |
304 | Not Modified |
305 | Use Proxy |
307 | Temporary Redirect |
400 | Bad Request |
401 | Unauthorized |
402 | Payment Required |
403 | Forbidden |
404 | Not Found |
405 | Method Not Allowed |
406 | Not Acceptable |
407 | Proxy Authentication Required |
408 | Request Timeout |
409 | Conflict |
410 | Gone |
411 | Length Required |
412 | Precondition Failed |
413 | Request Entity Too Large |
414 | Request-URI Too Long |
415 | Unsupported Media Type |
416 | Requested Range Not Suitable |
417 | Expectation Failed |
500 | Internal Server Error |
501 | Not Implemented |
502 | Bad Gateway |
503 | Service Unavailable |
504 | Gateway Timeout |
505 | HTTP Version Not Supported |
XMLHttpRequest对象的statusText属性
Ø 描述了HTTP状态代码文本。
Ø 仅当readyState值为3或4才可用。
Ø 当readyState为其它值时试图存取statusText属性将引发一个异常。
Ø 返回当前请求的响应行状态
XMLHttpRequest对象的abort()方法
Ø 暂停与一个XMLHttpRequest对象相联系的HTTP请求。
Ø 从而把该对象复位到未初始化状态。
Ø 用来中断请求,取消当前请求。
XMLHttpRequest对象的open()方法
Ø void open(string method, string url, boolean asynch, string username, string password) 建立对服务器的连接,初始化一个XHR对象的纯脚本方法。
1. ethod参数: 是必须提供的-指定发送请求的HTTP方法(GET,POST,PUT,DELETE或HEAD)。
2. uri参数: 用于指定请求发送到的服务器相应的URI。
3. async参数: 指定请求是否是异步的,预设是true,表示使用非同步方式。为了发送一个同步请求,需要把这个参数设置为false。
Ø 对于要求认证的服务器,提供可选的用户名和口令参数。
Ø 在调用open()方法后,XMLHttpRequest对象把readyState属性设置为1(打开)。
Ø 并且把responseText、responseXML、status和statusText属性复位到它们的初始值。
XMLHttpRequest对象的send()方法
Ø 向服务器发送请求。
Ø 仅当readyState值为1时,才可以调用send()方法;否则的话,XHR对象将引发一个异常。
Ø 当async参数为true时,send()方法立即返回,从而允许其它客户端脚本继续处理。
Ø 在调用send()方法后,XHR对象把readyState