• JavaWeb__XMLHTTP.readyState的五种状态


     HTTP 就绪状态

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

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

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

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

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

    隐秘就绪状态

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

    获取安全数据

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

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

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

    正确建立连接中状态代码体现。

    1. 建立连接
    2. /*
    3. 参数:
    4. 1. 请求方式:GET、POST
    5. * get方式,请求参数在URL后边拼接。send方法为空参
    6. * post方式,请求参数在send方法中定义
    7. 2. 请求的URL:
    8. 3. 同步或异步请求:true(异步)或 false(同步)
    9. */
    10. xmlhttp.open("GET","ajaxServlet?username=tom",true);
    11. //3.发送请求
    12. xmlhttp.send();
    13. //4.接受并处理来自服务器的响应结果
    14. //获取方式 :xmlhttp.responseText
    15. //什么时候获取?当服务器响应成功后再获取
    16. //当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。
    17. xmlhttp.onreadystatechange=function()
    18. {
    19. //判断readyState就绪状态是否为4,判断status响应状态码是否为200
    20. if (xmlhttp.readyState==4 && xmlhttp.status==200)
    21. {
    22. //获取服务器的响应结果
    23. var responseText = xmlhttp.responseText;
    24. alert(responseText);
    25. }
    26. }

  • 相关阅读:
    含文档+PPT+源码等]精品spring boot+MySQL学生在线考试系统vue[包运行成功]计算机Java毕业设计SSM项目源码
    提供CY系列菁染料CY3、CY5、CY5.5、CY7、CY7.5,ICG,荧光素FITC 系列染料标记吉兰糖胶Gellan gum
    Elasticsearch搜索优化-自定义路由规划(routing)
    创建具有负载平衡和集群的可扩展 Node.js 应用程序
    Vert.x web 接收请求时反序列化对象 Failed to decode 如何解决?
    nginx利用x_forwarded_for实现黑名单访问策略
    基于Python + Flask+ Mysq实现简易留言板
    LeetCode | 850. 矩形面积 II
    [开发浏览器实战]关于Firefox火狐浏览器的说明一二(国内版 国际版区别 账号切换 插件-恢复关闭的标签页 插件-tempermonkey油猴)
    十分钟入门以太和Opensea测试网批量发行NFT实战
  • 原文地址:https://blog.csdn.net/weixin_46813221/article/details/126929039