xmlHttpRequest 的几个方法属性
open()
:建立到服务器的新请求。send()
:向服务器发送请求。abort()
:退出当前请求。readyState
:提供当前 HTML 的就绪状态。responseText
:服务器返回的请求响应文本
前面提到,服务器在完成请求之后会在 XMLHttpRequest
的 onreadystatechange
属性中查找要调用的方法。这是真的,但还不完整。事实上,每当 HTTP 就绪状态改变时它都会调用该方法。这意味着什么呢?首先必须理解 HTTP 就绪状态。
HTTP 就绪状态表示请求的状态或情形。它用于确定该请求是否已经开始、是否得到了响应或者请求/响应模型是否已经完成。它还可以帮助确定读取服务器提供的响应文本或数据是否安全。在 Ajax 应用程序中需要了解五种就绪状态:
- 0 :请求没有发出(在调用
open()
之前)。 - 1 :请求已经建立但还没有发出(调用
send()
之前)。 - 2 :请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。
- 3 :请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。
- 4 :响应已完成,可以访问服务器响应并使用它。
与大多数跨浏览器问题一样,这些就绪状态的使用也不尽一致。您也许期望任务就绪状态从 0 到 1、2、3 再到 4,但实际上很少是这种情况。一些浏览器从不报告 0 或 1 而直接从 2 开始,然后是 3 和 4。其他浏览器则报告所有的状态。还有一些则多次报告就绪状态 1。在上一节中看到,服务器多次调用 updatePage()
,每次调用都会弹出警告框 —— 可能和预期的不同!
有了就绪状态和您在 Ajax 编程技术中学习到的服务器的响应,您就可以为 Ajax 应用程序添加另外一级复杂性了 —— 这要使用 HTTP 状态代码。这些代码对于 Ajax 来说并没有什么新鲜。从 Web 出现以来,它们就已经存在了。在 Web 浏览器中您可能已经看到过几个状态代码:
- 401 :未经授权
- 403 :禁止
- 404 :没找到
- 301 :永久移动
- 302 :找到(请求被重新定向到另外一个 URL/URI 上)
- 305 :使用代理(请求必须使用一个代理来访问所请求的资源)
function getSalesData() {
createRequest();
var url = "/boards/servlet/UpdateBoardSales";
request.open("HEAD"
, url, true);
request.onreadystatechange = updatePage;
request.send(null);
}
|
在这些情况中,您只使用了适当的头名,并将其传递给 XMLHttpRequest
对象的 getResponseHeader()
方法。因此要获取响应的长度,只需要调用 request.getResponseHeader("Content-Length");
。要获取内容类型,请使用 request.getResponseHeader("Content-Type");
。