全面理解 HTTP 的状态代码、就绪状态和 XMLHttpRequest 对象
简介:对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单的响应即可;但是对于希望掌 握 Ajax 的开发人员来说,必须要全面理解 HTTP 状态代码、就绪状态和 XMLHttpRequest 对象。在本文 中,Brett McLaughlin 将向您介绍各种状态代码,并展示浏览器如何对其进行处理,本文还给出了在 Ajax 中使用的比较少见的 HTTP 请求。
在本系列的 上篇文章 中,我们将详细介绍 XMLHttpRequest 对象,它是 Ajax 应用程序的中心,负 责处理服务器端应用程序和脚本的请求,并处理从服务器端组件返回的数据。由于所有的 Ajax 应用程序 都要使用 XMLHttpRequest 对象,因此您可能会希望熟悉这个对象,从而能够让 Ajax 执行得更好。
在本文中,我将在上一篇文章的基础上重点介绍这个请求对象的 3 个关键部分的内容:
·HTTP 就绪状态
·HTTP 状态代码
·可以生成的请求类型
这三部分内容都是在构造一个请求时所要考虑的因素;但是介绍这些主题的内容太少了。然而, 如果您不仅仅是想了解 Ajax 编程的常识,而是希望了解更多内容,就需要熟悉就绪状态、状态代码和请 求本身的内容。当应用程序出现问题时 —— 这种问题总是存在 —— 那么如果能 够正确理解就绪状态、如何生成一个 HEAD 请求或者 400 的状态代码的确切含义,就可以在 5 分钟内调 试出问题,而不是在各种挫折和困惑中度过 5 个小时。
下面让我们首先来看一下 HTTP 就绪状态 。
深入了解 HTTP 就绪状态
您应该还记得在上一篇文章中 XMLHttpRequest 对象有一个名 为 readyState 的属性。这个属性确保服务器已经完成了一个请求,通常会使用一个回调函数从服务器中 读出数据来更新 Web 表单或页面的内容。清单 1 给出了一个简单的例子(这也是本系列的上一篇文章中 的一个例子 —— 请参见 参考资料)。
XMLHttpRequest 或 XMLHttp:换名玫瑰
Microsoft 和 Internet Explorer 使用了一个名为 XMLHttp 的对象,而不是 XMLHttpRequest 对象,而 Mozilla、Opera、Safari 和 大部分非 Microsoft 浏览器都使用的是后者。 为了简单性起见,我将这两个对象都简单地称为 XMLHttpRequest。这既符合我们在 Web 上看到的情况, 又符合 Microsoft 在 Internet Explorer 7.0 中使用 XMLHttpRequest 作为请求对象的意图。(有关这 个问题的更多内容,请参见 第 2 部分。)
清单 1. 在回调函数中处理服务器的响应
function updatePage() {
if (request.readyState == 4) {
if (request.status == 200) {
var response = request.responseText.split ("|");
document.getElementById("order").value = response [0];
document.getElementById("address").innerHTML =
response[1].replace(/\n/g, "<br />");
} else
alert ("status is " + request.status);
}
}
这显然是就绪状态最 常见(也是最简单)的用法。正如您从数字 "4" 中可以看出的一样,还有其他几个就绪状态 (您在上一篇文章中也看到过这个清单 —— 请参见 参考资料):
·0:请求 未初始化(还没有调用 open())。
·1:请求已经建立,但是还没有发送(还没有调用 send())。
·2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
·3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成 。
·4:响应已完成;您可以获取并使用服务器的响应了。
如果您希望不仅仅是了 解 Ajax 编程的基本知识,那么就不但需要知道这些状态,了解这些状态是何时出现的,以及如何来使用 这些状态。首先,您需要学习在每种就绪状态下可能碰到的是哪种请求状态。不幸的是,这一点并不直观 ,而且会涉及几种特殊的情况。