返回顶部
首页 > 资讯 > 精选 >原生js XMLhttprequest请求onreadystatechange执行两次如何解决
  • 105
分享到

原生js XMLhttprequest请求onreadystatechange执行两次如何解决

2023-07-05 05:07:52 105人浏览 八月长安
摘要

这篇文章主要讲解了“原生js XMLHttprequest请求onreadystatechange执行两次如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“原生js 

这篇文章主要讲解了“原生js XMLHttprequest请求onreadystatechange执行两次如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“原生js XMLhttprequest请求onreadystatechange执行两次如何解决”吧!

    原生js XMLhttprequest请求onreadychange执行两次

    最近做到一个页面需要兼容IE,然后就写了一个原生 XMLhttprequest请求

    直接上错误代码

    xmlHttp = new XMLHttpRequest();        xmlHttp.open("post","https://baidu.com/mianxiang/baidu/biancheng");        xmlHttp.setRequestHeader("Content-Type","application/JSON");        xmlHttp.send(XXXXXXXXXX) ;        xmlHttp.onreadystatechange = function () {            if(this.status==200){                console.log("responseText",this.responseText);            }        };

    在上面代码中,当status == 200 的console.log内容每次请求,都会在控制台打印两次,也就是说里面的逻辑会被执行两次,百度了很多都没有发现相似问题,和具体解决办法。

    xmlHttp = new XMLHttpRequest();        xmlHttp.open("post","https://baidu.com/mianxiang/baidu/biancheng");        xmlHttp.setRequestHeader("Content-Type","application/json");        xmlHttp.send(XXXXXXXXXX) ;        xmlHttp.onreadystatechange = function () {            if(xmlHttp.readyState == 4 && this.status==200){                console.log("responseText",this.responseText);            }        };

    最后偶然发现了和正确代码的差距,补上“ xmlHttp.readyState == 4 ”

    执行一次,问题解决。

    分析,可能是因为在没有添加判断readyState时,当options预请求执行时,也会有一次状态码200的,所以会被执行两次,但是疑惑点是预请求不会返回数据,但是在打印时,两次打印都是有数据的。

    查资料+请教大佬 = get 知识

    知识:

    • 创建xmlhttprequest对象之后没有调用open之前readystate值为0,调用open()之后就变为1了,并且此时onreadystatechange函数与open()几乎是同时执行的。

    • 在之后调用send方法之后,在startHttpRequest函数中readystate值仍为1,而调用send方法之后应该有2,3,4三个状态,而只有在startHttpRequest函数用alert语句才可以观察到3个值!

    • 这是为什么呢?这是因为在startHttpRequest函数中当解析到send这一句时,并没有真正开始执行send执行。

    • 只有send执行,才可以在onreadystatechange函数观察到状态值的变化。

    • readystate不是发送的状态,它是准备发送的状态,要把它想像成“人间大炮一级准备、二级准备、放”这样的口号,不是请求发送本身。

    • 同时xmlhttp也不是监听服务器信息,它是在send的时候获取服务器返回的状态信息而已,只有一次,监听则是一直在观察状态。

    关于readyState不同状态总结

    (0) 未初始化

    此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。

    值为0表示对象已经存在,否则浏览器会报错--对象不存在。

    (1) 载入

    此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。

    并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。

    (2) 载入完成

    此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。

    值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。

    (3) 交互

    此阶段解析接收到的服务器端响应数据。

    即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。

    状态3表示正在解析数据。

    (4) 完成

    此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。

    值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。

    这个时候再回顾之前为何执行两次onreadystatechange, 因为当state每次变化的时候都会执行到onreadystatechange,其实是readyState每次变化都会有执行onreadystatechange,因为我判断了this.status == 200 ,所以当服务器响应了之后返回了200的状态码,才会执行console.log(),才有上面的执行两次的问题。

    感谢各位的阅读,以上就是“原生js XMLhttprequest请求onreadystatechange执行两次如何解决”的内容了,经过本文的学习后,相信大家对原生js XMLhttprequest请求onreadystatechange执行两次如何解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: 原生js XMLhttprequest请求onreadystatechange执行两次如何解决

    本文链接: https://lsjlt.com/news/349872.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 原生js XMLhttprequest请求onreadystatechange执行两次如何解决
      这篇文章主要讲解了“原生js XMLhttprequest请求onreadystatechange执行两次如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“原生js ...
      99+
      2023-07-05
    • 原生js XMLhttprequest请求onreadystatechange执行两次的解决
      目录原生js XMLhttprequest请求onreadychange执行两次关于readyState不同状态总结(0) 未初始化(1) 载入(2) 载入完成(3) 交互(4) 完...
      99+
      2023-02-23
      js XMLhttprequest onreadystatechange 原生js XMLhttprequest请求 onreadystatechange执行两次
    • SpringAop @Around执行两次的原因及解决
      在使用AOP环绕通知做日志处理的时候,发现@Around方法执行了两次,虽然这里环绕通知本来就会执行两次,但是正常情况下是在切点方法前执行一次,切点方法后执行一次,但是实际情况却是,...
      99+
      2024-04-02
    • 如何解决axios会发送两次请求有个OPTIONS请求的问题
      这篇文章主要为大家展示了“如何解决axios会发送两次请求有个OPTIONS请求的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决axios会发送两次...
      99+
      2024-04-02
    • SpringAop @Around执行两次的原因以及解决方法
      这篇文章主要讲解了“SpringAop @Around执行两次的原因以及解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringAop @Around执行两次的原因以及解决方法”吧...
      99+
      2023-06-20
    • 原生JS如何发送异步数据请求
      这篇文章主要介绍原生JS如何发送异步数据请求,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在做项目的时候,有时候需要用到异步数据请求,但是如果这个时候没有框架的依赖,就需要用到原生J...
      99+
      2024-04-02
    • labview执行请求时出现问题如何解决
      当LabVIEW执行请求时出现问题,可以尝试以下解决方法:1. 检查错误信息:LabVIEW会提供详细的错误信息,可以通过查看错误信...
      99+
      2023-09-15
      labview
    • 原生js+jquery+ajax请求以及jsonp如何调用
      这篇文章主要为大家展示了“原生js+jquery+ajax请求以及jsonp如何调用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“原生js+jquery+aja...
      99+
      2024-04-02
    • win10资源保护无法执行请求如何解决
      Win10资源保护无法执行请求可能是由于系统文件损坏或权限问题引起的。以下是一些解决方法:1. 运行系统文件检查工具:按下Win +...
      99+
      2023-09-08
      win10
    • 如何解决按钮触发Ajax请求时一次点击两次提交的问题
      这篇文章主要介绍了如何解决按钮触发Ajax请求时一次点击两次提交的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。页面中的按钮的type是...
      99+
      2024-04-02
    • 如何解决JQuery Ajax执行跨域请求数据的问题
      这篇文章将为大家详细讲解有关如何解决JQuery Ajax执行跨域请求数据的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下原来的ajax请求如下:$.ajax...
      99+
      2024-04-02
    • 如何解决多个Ajax请求执行返回先后的问题
      这篇文章主要讲解了“如何解决多个Ajax请求执行返回先后的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决多个Ajax请求执行返回先后的问题”吧!...
      99+
      2024-04-02
    • 如何解决jquery中ajax请求后台数据成功后既不执行success也不执行error的问题
      这篇文章给大家分享的是有关如何解决jquery中ajax请求后台数据成功后既不执行success也不执行error的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。jquery...
      99+
      2024-04-02
    • 如何进行JSONP跨域请求原理的深入解析
      这篇文章将为大家详细讲解有关如何进行JSONP跨域请求原理的深入解析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是同源策略同源策略,它是由Netscape提出的一个著名的安全策略。现在...
      99+
      2023-06-26
    • ajax跨域请求js拒绝访问的问题如何解决
      本篇内容介绍了“ajax跨域请求js拒绝访问的问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    • 如何解决ie发送ajax请求返回上一次结果的问题
      这篇文章主要讲解了“如何解决ie发送ajax请求返回上一次结果的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决ie发送ajax请求返回上一次结果...
      99+
      2024-04-02
    • 如何解决jquery中ajax多次请求数据时不刷新的问题
      这篇文章主要为大家展示了“如何解决jquery中ajax多次请求数据时不刷新的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决jquery中ajax多...
      99+
      2024-04-02
    • 如何解决img标签src属性值为空时2次请求问题
      这篇文章给大家分享的是有关如何解决img标签src属性值为空时2次请求问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。img src值为空时,2次请求 以前应该有同学遇到过类似的情况, 当有一个类似如 <...
      99+
      2023-06-08
    • vue前后端分离如何解决每次请求session都会变的问题
      目录vue前后端分离每次请求session都会变解决方法vue前后端分离session丢失,前端解决方式1、解决前端每次发送的ajax都是形成新的会话2、本地测试时结果发现还是无法成...
      99+
      2022-11-13
      vue前后端分离 vue请求session vue session
    • 如何解决js+ajax同步请求造成浏览器假死的问题
      这篇文章主要为大家展示了“如何解决js+ajax同步请求造成浏览器假死的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决js+ajax同步请求造成浏览...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作