求问js中的clearInterval函数无法关闭定时函数的问题

qq_41284289 2019-05-10 04:48:44
求问大佬,今天我在学AJAX封装的时候,看到里面有一个setInterval函数,主要作用就是想让AJAX发请求到服务器,但如果时间超时则中断AJAX引擎对象发起的请求。我前端的代码是这样的


我是想AJAX请求一个Servlet。然后我为了演示超时效果,在Servlet加了个线程睡眠。但是呢,这个定时函数确实捕捉到了超时的情况,就是
捕捉完了以后,它一直在控制台输出请求中断。clearInterval好像关不掉。

但是如果我把clearInterval的位置放到这里

它就可以关掉了。只不过问题是,关掉是关了,但是按理说我在定是函数里设置如果超时就中断AJAX对象的连接呀。为什么还能从Servlet拿到响应数据呢?
...全文
531 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2019-05-10
  • 打赏
  • 举报
回复
第一,你在onreadystatechange事件中创建定时器。onreadystatechange事件会在ajax请求状态改变时多次触发,这会同时创建多个定时器。而timer变量中只能保留最后一个定时器的id数值。这样clearInterval(timer);就只能关闭最后一个定时器。所以应该在 onreadystatechange事件之外创建定时器。 第二,这个“请求中断”定时器应该是只需要一次执行,直接用setTimeout就好了。不需要在setInterval里面还要用clearInterval关闭。 第三,你把clearInterval的位置放setInterval下面等于是刚刚创建定时器就马上关闭,等于没有创建定时器,也就不会超时中断了。
2019-05-10
  • 打赏
  • 举报
回复
onreadystatechange这个事件会多次调用,把定时器放在事件外面 只执行一次用setTimeout
Hello World, 2019-05-10
  • 打赏
  • 举报
回复
用setTimeOut就可以了,不用重复清除。

另外请求已经发起,服务器会继续工作,只是客户端取消接收和处理而已

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧