XMLHTTP.readyState的五种状态
2016-08-16 14:45
351 查看
参考w3c:http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp 中,遇到XMLHTTP.readyState 返回状态码等,不理解,了解一下
对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单的响应即可;但是对于希望掌握 Ajax 的开发人员来说,必须要全面理解 HTTP 状态代码、就绪状态和 XMLHttpRequest 对象。在本文中,Brett McLaughlin 将向您介绍各种状态代码,并展示浏览器如何对其进行处理,本文还给出了在 Ajax 中使用的比较少见的 HTTP 请求。
转:http://www.cnblogs.com/fsjohnhuang/articles/2345653.html
在本系列的 上篇文章 中,我们将详细介绍
XMLHttpRequest对象,它是 Ajax 应用程序的中心,负责处理服务器端应用程序和脚本的请求,并处理从服务器端组件返回的数据。由于所有的 Ajax 应用程序都要使用
XMLHttpRequest对象,因此您可能会希望熟悉这个对象,从而能够让 Ajax 执行得更好。
在本文中,我将在上一篇文章的基础上重点介绍这个请求对象的 3 个关键部分的内容:
HTTP 就绪状态
HTTP 状态代码
可以生成的请求类型
这三部分内容都是在构造一个请求时所要考虑的因素;但是介绍这些主题的内容太少了。然而,如果您不仅仅是想了解 Ajax 编程的常识,而是希望了解更多内容,就需要熟悉就绪状态、状态代码和请求本身的内容。当应用程序出现问题时 —— 这种问题总是存在 —— 那么如果能够正确理解就绪状态、如何生成一个 HEAD 请求或者 400 的状态代码的确切含义,就可以在 5 分钟内调试出问题,而不是在各种挫折和困惑中度过 5 个小时。
|
深入了解 HTTP 就绪状态
您应该还记得在上一篇文章中
XMLHttpRequest对象有一个名为
readyState的属性。这个属性确保服务器已经完成了一个请求,通常会使用一个回调函数从服务器中读出数据来更新 Web 表单或页面的内容。清单 1 给出了一个简单的例子(这也是本系列的上一篇文章中的一个例子 —— 请参见 参考资料)。
清单 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); } } |
0:请求未初始化(还没有调用
open())。
1:请求已经建立,但是还没有发送(还没有调用
send())。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4:响应已完成;您可以获取并使用服务器的响应了。
如果您希望不仅仅是了解 Ajax 编程的基本知识,那么就不但需要知道这些状态,了解这些状态是何时出现的,以及如何来使用这些状态。首先,您需要学习在每种就绪状态下可能碰到的是哪种请求状态。不幸的是,这一点并不直观,而且会涉及几种特殊的情况。
隐秘就绪状态
第一种就绪状态的特点是
readyState属性为 0(
readyState == 0),表示未初始化状态。一旦对请求对象调用
open()之后,这个属性就被设置为 1。由于您通常都是在一对请求进行初始化之后就立即调用
open(),因此很少会看到
readyState == 0的状态。另外,未初始化的就绪状态在实际的应用程序中是没有真正的用处的。
不过为了满足我们的兴趣,请参见 清单 2 的内容,其中显示了如何在 readyState 被设置为 0 时来获取这种就绪状态。
清单 2. 获取 0 就绪状态
function getSalesData() { // Create a request object createRequest(); alert("Ready state is: " + request.readyState); // Setup (initialize) the request var url = "/boards/servlet/UpdateBoardSales"; request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null); } |
getSalesData()是 Web 页面调用来启动请求(例如点击一个按钮时)所使用的函数。注意您必须在调用
open()之前 来查看就绪状态。图 1 给出了运行这个应用程序的结果。
图 1. 就绪状态 0
|
open()函数的情况很少。在大部分 Ajax 编程的真实情况中,这种就绪状态的唯一用法就是使用相同的
XMLHttpRequest对象在多个函数之间生成多个请求。在这种(不常见的)情况中,您可能会在生成新请求之前希望确保请求对象是处于未初始化状态(
readyState == 0)。这实际上是要确保另外一个函数没有同时使用这个对象。
查看正在处理的请求的就绪状态
除了 0 就绪状态之外,请求对象还需要依次经历典型的请求和响应的其他几种就绪状态,最后才以就绪状态 4 的形式结束。这就是为什么您在大部分回调函数中都可以看到
if (request.readyState == 4)这行代码;它确保服务器已经完成对请求的处理,现在可以安全地更新 Web 页面或根据从服务器返回来的数据来进行操作了。
要查看这种状态发生的过程非常简单。如果就绪状态为 4,我们不仅要运行回调函数中的代码,而且还要在每次调用回调函数时都输出就绪状态。 清单 3给出了一个实现这种功能的例子。
清单 3. 查看就绪状态
function updatePage() { // Output the current ready state alert("updatePage() called with ready state of " + request.readyState); } |
updatePage();要实现这种设置,可以将请求对象的
onreadystatechange属性设置为
updatePage()。
这段代码就是
onreadystatechange意义的一个确切展示 —— 每次请求的就绪状态发生变化时,就调用
updatePage(),然后我们就可以看到一个警告了。图 2 给出了一个调用这个函数的例子,其中就绪状态为 1。
相关文章推荐
- XMLHTTP.readyState的五种状态
- xmlHttp.readyState的五种状态
- XMLHTTP.readyState的五种状态
- XMLHTTP.readyState的五种状态
- ajax XMLHttpRequest.readyState: 状态码 0 - (未初始化)还没有调用send()方法 解决了
- xmlHttp.readystate的几种状态
- 对象XMLHttpRequest readyState 和status状态对照(转)
- 对象XMLHttpRequest readyState 和status状态对照 (收集)
- 转 XMLHttpRequest().readyState的五种状态详解
- XMLHttpRequest().readyState的五种状态详解 .
- XMLHTTP.readyState的五种状态
- ajax readyState的五种状态详解
- XMLHTTP.readyState的五种状态
- ajax readyState的五种状态详解
- XMLHTTP.readyState的五种状态
- XMLHTTPREQUEST().READYSTATE的五种状态详解(转)
- JavaScript readyState的五种状态详解
- ajax readyState的五种状态详解
- 转 XMLHttpRequest().readyState的五种状态详解
- XMLHttpRequest对象readyState的五种状态