遇到的一个问题,大概是这样的。。。

前端页面上有一个列表,遍历列表按照并发度执行ajax操作,需要等上一个并发度执行返回结果后才能决定是否进行下一个并发度的执行。

1、一开始的想法是,写一个ajax执行函数,传入每次执行的并发度,用for循环遍历列表,执行这个函数。比如有8个IP,然后并发度2,就for循环,执行4次的这个函数。但是,这样是不行的,因为ajax默认情况下是异步多线程的的,也就是说,我在执行第一个并发度的IP时候,它并不会等待后端的接口返回执行的结果再往下,而是会再开一个线程,执行下一个并发度的IP,这样就违背了我需要等待上一个并发度执行结果才能再继续往下执行的要求。

2、然后,第二个想法是,既然ajax是异步的,那我用async : false把它改成同步的不就好了,然后,这就导致了标题所示的问题,虽然这样就可以按照顺序来执行了,等上一个ajax请求返回结果后才执行下一个请求,但是,因为单线程的原因,导致ajax返回结果后前端UI的变化无法马上执行,而是直接执行下一个ajax了,也就是UI阻塞,知道ajax都执行完了才执行UI的变化,这样对用户很不友好,得等全部都执行完了才能看到变化,像个憨批。
查了下,如果想同步又执行UI的话,需要为AJAX请求写回调函数,就是接收到后端返回的结果后会执行的操作。因为一些原因这种方法在我的具体场景了好像也不行,就不研究了。
总是,ajax最好还是别设成同步的了,单线程不知道会出现什么问题,还是尽量在代码逻辑上支持异步的情况。

3、最好的解决方法是将执行的ajax函数改成递归的,也就是套娃hhh,全局设置一个flags标识,只有标识为True的时候才继续执行下去,而标识为False的时候则停止执行,在遇到终止条件是就把标识设为Flase(具体情况具体分析),并且需要写在ajax的sucess代码段,这样等待上一个请求成功返回执行结果才会进行判断是否往下执行下一个请求,这样就避免了第一种情况。

AJAX 同步请求导致的UI阻塞问题相关推荐

  1. 函数内的ajax同步请求导致遮罩层失效、或者导致loading正在加载提示失效问题

    功能需求 编写点击按钮,弹出loading遮罩层提示正在加载中-,同时查询后台信息,拼接数据后渲染到列表时,为了保障渲染时,列表中的数据已经拼接完成.所以在for循环中使用同步ajax进行请求,在su ...

  2. ajax同步请求导致beforeSend在调用前未执行

    async属性的作用是设置ajax同步或异步请求,async:false 为同步请求,async:true 为异步请求,ajax默认是异步请求,当使用同步请求时在服务器返回值之前不再加载后面的代码,只 ...

  3. js样式会影响ajax,js ajax同步请求造成浏览器假死的问题

    今天写了一个简单的loading效果,希望在点击加载按钮后会出现loading字样,然后执行ajax同步请求,加载完之后loading样式消失,本来是很简单的需求,结果遇上了很尴尬的问题~ 问题:当我 ...

  4. ajax同步请求加上loading遮罩遇到的坑

    ajax同步请求加上loading遮罩遇到的坑 问题出在ajax被我设置成同步了,浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉.当我们执行异步ajax的时候没有 ...

  5. 使用Ajax同步请求增加页面等待提示

    使用Ajax同步请求增加页面等待提示 最近在做项目时,有一个需求是批量打印好多个合同,使用AJAX向后台传送数据,等待后台执行后,需要把生成之后的文件地址传送过来. 后台的处理时间比较长,根据合同的多 ...

  6. Ajax——同步请求与异步请求

    Ajax--同步请求与异步请求 浏览器和服务器之间数据传输方式 同步方式 异步方式 两种方式有什么不同? 同步请求,服务器响应时,页面整体刷新 异步请求,服务器响应时,页面局部刷新 异步请求有什么优点 ...

  7. ajax同步请求和异步请求

    ajax同步请求和异步请求 前序 什么是同步请求? 什么是异步请求? 比较同步和异步请求 前序 最近好长时间没写博客了,主要由于前一段时间出差,没啥心思写,今天开始重新继续.进入主题,ajax的同步请 ...

  8. 大量Ajax同步请求,出现浏览器页面假死,而Loading图标卡死的情况

    最近做了一个功能,需要大量删除数据,但是只能从前台一条一条调用API删除(客户的奇怪要求). 同时在删除的过程中,我写了一个Loading的图标,用于展示删除的progress(就是删除了百分之多少的 ...

  9. ajax同步请求 超时时间问题

    最近做到一个功能,从别的连接跳转登录到我们系统后台,登录后会查询一些数据.一开始登录用的异步调用,领导看日志发现还没登录就调了好几个查询接口,要改.我想简单点就改成同步不就行了,然后上同步,恩,好多了 ...

最新文章

  1. oracle 插入 基准测试,oracle proc 插入操作性能优化实践
  2. 5G时代到来,人工智能设备如何重塑TMT行业
  3. 3字节转换为有符号整型C语言,3.C语言整型数据
  4. CAP 发布 5.0 版本正式发布
  5. 1982:【19CSPJ普及组】数字游戏 scratch C++
  6. 深入理解计算机系统——bomblab
  7. 服务器修改重生点,服务器设置重生点
  8. hdu4410(Boomerang)(计算几何)
  9. mysql主从配置自增id_MySQL自增列主从不一致的测试(r12笔记第37天)
  10. 【优化电价】基于matlab内点法求解实时电价最优问题【含Matlab源码 1161期】
  11. android双击回到顶部,Android之双击回到顶部
  12. SERC2013 J You Win!
  13. 对“淡泊以明志,宁静以致远”的理解
  14. C#免装oracle客户端查询AMERICAN_AMERICA.US7ASCII字符集 中文乱码解决办法
  15. 第五人格深渊金币每周更新时间
  16. JAVA设置代理的两种方式(HTTP和HTTPS)
  17. UG10.0四五轴立加卧加后处理制作教程
  18. 我的DW个人网站设计——安徽宣城6页HTML+CSS+JavaScript
  19. Java项目管理工具:maven配置详解
  20. 俄美共同研制出新型钙钛矿太阳能电池

热门文章

  1. (笔记自用)JDY-31蓝牙模块的使用
  2. LocalDateTime工具类:根据当前、周、月、季度、半年、年等维度获取时间hutool工具包获取农历日期,生肖,传统节日
  3. ESP8266墨水屏
  4. paip 系统无法在消息文件中为 Application 找到消息号为 0x2350 的消息文本 服务器存储空间不足 无
  5. Python 实现英文新闻摘要自动提取 (2)
  6. 如何转行游戏行业及我眼中的理想游戏开发团队
  7. 语音端点检测(Voice Activity Detection,VAD)
  8. 数据分析指标篇——指标设计
  9. 国产 车规 60V升降压控制器 SCT81620Q 可替代LM3478、LM3481
  10. DOTA无法加载服务器指定的地图,Dota2自定义地图工具怎么安装_Dota2自定义地图工具常见问题处理方法...