您的位置:首页 > 理论基础 > 计算机网络

XMLHTTP.readyState的五种状态

2016-04-01 09:37 295 查看
[b]深入了解 HTTP 就绪状态[/b]

  0:请求未初始化(还没有调用
open())


  
1:请求已经建立,但是还没有发送(还没有调用
send())


  2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。

  3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。

  4:响应已完成;您可以获取并使用服务器的响应了。

隐秘就绪状态

  第一种就绪状态的特点是
readyState
属性为 0(
readyState == 0
),表示未初始化状态。一旦对请求对象调用
open()
之后,这个属性就被设置为 1。由于您通常都是在一对请求进行初始化之后就立即调用
open()
,因此很少会看到
readyState == 0
的状态。另外,未初始化的就绪状态在实际的应用程序中是没有真正的用处的。

不过为了满足我们的兴趣,请参见 清单 2 的内容,其中显示了如何在 readyState 被设置为 0 时来获取这种就绪状态。

获取安全数据

  所有的文档和规范都强调,只有在就绪状态为 4 时数据才可以安全使用。相信我,当就绪状态为 3 时,您很少能找到无法从
responseText
属性获取数据的情况。然而,在应用程序中将自己的逻辑依赖于就绪状态 3 可不是什么好主意 —— 一旦您编写了依赖于就绪状态 3 的完整数据的的代码,几乎就要自己来负责当时的数据不完整问题了。

比较好的做法是向用户提供一些反馈,说明在处于就绪状态 3 时,很快就会有响应了。尽管使用
alert()
之类的函数显然不是什么好主意 —— 使用 Ajax 然后使用一个警告对话框来阻塞用户显然是错误的 —— 不过您可以在就绪状态发生变化时更新表单或页面中的域。例如,对于就绪状态 1 来说要将进度指示器的宽度设置为 25%,对于就绪状态 2 来说要将进度指示器的宽度设置为 50%,对于就绪状态 3 来说要将进度指示器的宽度设置为 75%,当就绪状态为 4 时将进度指示器的宽度设置为 100%(完成)。

当然,正如您已经看到的一样,这种方法非常聪明,但它是依赖于浏览器的。在 Opera 上,您永远都不会看到前两个就绪状态,而在 Safari 上则没有第一个(1)。由于这个原因,我将这段代码留作练习,而没有在本文中包括进来。

现在应该来看一下状态代码了。

进行JSP请求发送:

request.open("GET", url, true);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: