wika 威卡 wika压力表 威卡压力表 wika双金属温度计 威卡双金属温度计 wika压力表 wika压力变送器 wika温度计 威卡压力变送器 威卡温度计 wika 威卡 wika压力表 威卡压力表 wika双金属温度计 威卡双金属温度计 wika压力表 wika压力变送器 wika温度计 威卡压力变送器 威卡温度计 wika 威卡 wika压力表 威卡压力表 wika双金属温度计 威卡双金属温度计 wika压力表 wika压力变送器 wika温度计 威卡压力变送器 威卡温度计 wika 威卡 wika压力表 威卡压力表 wika双金属温度计 威卡双金属温度计 wika压力表 wika压力变送器 wika温度计 威卡压力变送器 威卡温度计 店铺风水| 白氏起名| 广西风水| 2013年6月黄道吉日搬家| 周公解梦大全查询方法| 龙行天下风水论坛| 双鱼座今日的运势| 什么是十二星座| 图解梦溪笔谈| 百家讲坛易经迅雷下载| 巨蟹座2014年开运手链| 卧室书桌摆放风水| 探索星座的奥秘| 给小孩起名打分| 面相学真人图解| 称骨生辰八字| 宝宝取名软件v22注册码| 五行中属火的名字| 玄空风水阴宅实例| 房屋朝向风水| 处女座一生的运势| 属兔的那天出生最好| 寇静什么星座| 付费起名| 公司取名破解版| 家装风水学| 属龙人婚姻与命运| 十二星座测试题| 免费占卜事业| 算命看相可信吗| 办公室风水改造| 住宅风水禁忌与破解| 摩羯座和双子座最配| 家庭装修风水大全| 天空星座查询| 起名服务| 小孩起名打分网站| 宝宝如何取名字| 诸葛占卜| 周公解梦梦见小白蛇| 八字头打一字| 解签文| qq号码测吉凶周易| 根据生日时辰算命| 风水禁忌一百例| 易经入门图解| 曾仕强易经的智慧26| 客厅镜子风水| 装修风水学| 天蝎座vs摩羯座| 天蝎座男人运势| 程序员老黄历| 黄历买车吉日查询| 起名字最准测试打分| 卧室风水学| 处女座女生回心转意| 属狗的吉祥物是什么| 怎么查太阳星座| 婴儿起名大全女孩| 今年的财运怎么样| 怎么增强财运| 旺夫碧玺| 八字婚姻算命免费| 老黄历电子书| 陈红星座| 星座运势准吗| 鼠宝宝取名大全| 周公解梦破解龙| 周公解梦梦见火| 风水大师闯异界| 16

解决js ajax同步请求造成浏览器假死的问题

标签:三万人 1 算命免费网

转载  更新时间:2018-07-16 15:17:52   作者:来自潘大大   我要评论

下面小编就为大家分享一篇解决js ajax同步请求造成浏览器假死的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一、问题的起因

今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可以刷新用户当前的积分,这个肯定需要使用到ajax的同步请求了,当时喀喀喀三下五除二写玩了,大概代码如下:

/**
  * 异步当前用户积分 by zgw 20161216
  * @return {[type]} [description]
 */
 function flushIntegralSum() {
     //点击按钮刷新前修改按钮的文案,已经去掉点击事情,防止多次点击
  $("#flushbutton").replaceWith('<a style="color:#3fb0ff;font-size:14px;" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="flushbutton">正在刷新</a>');
  $.ajax({
   url:'URL',
   type:'post',
   async:false,
   // data:{},
   success:function(json){
    json = eval('('+json+')');
    if(json.url){window.location.href=json.url;return;}
    $("#flushbutton").replaceWith('<a style="color:#3fb0ff;font-size:14px;" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="flushFreeSum();" id="flushbutton">刷新积分</a>');
    if(json.code!=1){
     alert(json.msg);
    }else{
     $("#free_sum").html(json.free_sum);
    }
    return;
   }
  });
 }

本以为这么简单的功能喀喀喀随便写写就没事了,在运行的时候出现了问题,当用户点击刷新积分按钮时,文案没有修改为"正在刷新",但是ajax请求发送了,于是我查看网页代码,发现js其实把文案和html元素绑定的onclick事件去掉了,在请求成功后有变回原来的了,但是页面上边文案没有改变,当时很奇怪,不知道为什么html代码里边改变了,页面却没有变点变化

二、了解问题原因

问题的根源:当时我进行了排查,最后发现是 "async:false" 的问题,换成异步的就没有问题了,那为什么同步请求会产生代码失效的问题呢?

原因:浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉。当我们执行异步ajax的时候没有问题,但当设置为同步请求时,其他的动作(ajax函数后面的代码,还有渲染线程)都会停止下来。即使我的DOM操作语句是在发起请求的前一句,这个同步请求也会“迅速”将UI线程阻塞,不给它执行的时间。这就是代码失效的原因。

三、解决问题

1.我当时使用了 setTimeout 来解决,把ajax代码放在sestTimeout中,让浏览器重启一个线程来操作,这样就解决问题了,代码如下:

function flushIntegralSum() {
     //点击按钮刷新前修改按钮的文案,已经去掉点击事情,防止多次点击
  $("#flushbutton").replaceWith('<a style="color:#3fb0ff;font-size:14px;" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="flushbutton">正在刷新</a>');
  setTimeout(function(){
   $.ajax({
    url:'URL',
    type:'post',
    async:false,
    // data:{},
    success:function(json){
     json = eval('('+json+')');
     if(json.url){window.location.href=json.url;return;}
     $("#flushbutton").replaceWith('<a style="color:#3fb0ff;font-size:14px;" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="flushFreeSum();" id="flushbutton">刷新积分</a>');
     if(json.code!=1){
      alert(json.msg);
     }else{
      $("#free_sum").html(json.free_sum);
     }
     return;
    }
   });
  },0) 
 }

setTimeout的第二个参数设为0,浏览器会在一个已设的最小时间后执行

到这里问题就解决了,但是你可以试试当你点击按钮的时候如果需要弹出一个gif图片,并且图片一直在旋转,提示更新中,你会发现图片虽然会显示,但是图片却是不动的,那是因为虽然同步请求延迟执行了,但是它执行期间还是会把UI线程给阻塞。这个阻塞相当牛逼,连gif图片都不动了,看起来像一张静态图片一样。结论很明显,setTimeout治标不治本,相当于把同步请求“稍稍”异步了一下,接下来还是会进入同步的噩梦,阻塞线程,这种方法只适合发请求之前操作简单的时间短的情况

2.使用 Deferred 来解决

以上这篇解决js ajax同步请求造成浏览器假死的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • js对字符的验证方法汇总

    js对字符的验证方法汇总

    这篇文章主要介绍了js对字符的验证方法,实例汇总了汉字验证、手机验证、邮箱验证、身份证号验证等各种常用技巧,需要的朋友可以参考下
    2018-07-16
  • js下利用控制器载入对应脚本

    js下利用控制器载入对应脚本

    因项目开发需要,须将每一个方法都独立成单独的js文件以便载入、维护,所以,必须需要有一个控制器用于载入这些方法。
    2018-07-16
  • js焦点文字滚动效果代码分享

    js焦点文字滚动效果代码分享

    这篇文章主要介绍了js焦点文字滚动效果,功能实现非常简单,推荐给大家,有需要的小伙伴可以参考下。
    2018-07-16
  • JavaScript实现百度搜索框效果

    JavaScript实现百度搜索框效果

    这篇文章主要为大家详细介绍了JavaScript实现百度搜索框效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-16
  • javascript实现限制上传文件大小

    javascript实现限制上传文件大小

    这篇文章主要介绍了javascript实现限制上传文件大小的方法和示例,需要的朋友可以参考下
    2018-07-16
  • 用Js实现的动态增加表格示例自己写的

    用Js实现的动态增加表格示例自己写的

    动态增加表格的方法有很多,但大多说实现起来比较繁琐,本文的这个示例是作者自己手写的,经测试效果还不错,但唯独不兼容FF,感兴趣的朋友可以参考下
    2018-07-16
  • js添加绑定事件的方法

    js添加绑定事件的方法

    这篇文章主要为大家详细介绍了js添加事件的通用方法,还为大家介绍了js绑定事件的常用方式,感兴趣的小伙伴们可以参考一下
    2018-07-16
  • d3.js入门教程之数据绑定详解

    d3.js入门教程之数据绑定详解

    这篇文章主要介绍了关于d3.js数据绑定的相关资料,文中通过示例代码介绍的非常详细,对大家学习只d3.js具有一定的参考价值,需要的朋友下面来一起看看吧。
    2018-07-16
  • Js放到HTML文件中的哪个位置有什么区别

    Js放到HTML文件中的哪个位置有什么区别

    先明白js能放在HTML的那个位置,分别是head和body中。大部分人都是放到head里面的。下面为大家介绍下放到这两个地方的区别
    2018-07-16
  • 将函数的实际参数转换成数组的方法

    将函数的实际参数转换成数组的方法

    实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组。
    2018-07-16

最新评论

易经注解 生辰八字测结婚吉日 馥郁园小区 十二星座的真实性格 塔罗牌爱情算命
周公解梦梦见摘甜瓜 现在风水 今天双子座流星雨 属蛇的性格 钦州路 报数算卦 提高财运的方法 阿鲁科尔沁旗
8 13 4 8 7
熟食培训 仪表 养生 传感器 宠物 讨债 励志名言 手游游戏 名人名言 散文 离心机 育儿 空调 真空泵 空压机 超声波清洗机 纺织 建筑装饰 机械 五金 铜价 空调 减肥 养生网 整形美容 真人娱乐网 时尚女人 机械门户网 债务维权 侦探 空调维修 家电维修 空调维修制冷 机械网 娱乐新闻 怀孕知识 快递公司 汽车论坛 天下奇闻 风水 婚纱摄影 两性知识 说话技巧 包包 健康门户 金融理财 军事 陶瓷 高校招生 移动通信 时尚女人 股票行情 塑料 体育新闻 电影 健康小常识 服装品牌 科技新闻 生理健康 女性时尚 寺庙 免费算命 星座运势 儿童教育 旅游 历史文化 艺考 今日新闻 化妆品 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 Wika压力表 wika压力表 wika压力表 wika压力表 wika压力表 电伴热厂家 天然气锅炉 罗斯蒙特压力变送器 冷热一体机玻璃钢格栅 恒功率电伴热带 磁翻板液位厂家 铠装热电偶 消防车卷帘门 密度计生产厂家 不锈钢压力表 LED电源厂家 电源外壳 在线密度计 特种电缆 铂铑热电偶 耐震压力表 生物质锅炉 有机玻璃管 亚克力管 生物质热风炉 wika 威卡 wika压力表 威卡压力表 威卡 智能型压力变送器 安徽天康股份有限公司 流量计生产厂家 拉丝模 开关柜 化工流程泵 流量计生产厂家 电磁流量计厂家 流量计厂家 超声波液位计 消防车铝合金卷帘门 消防车铝合金卷帘门 消防车卷帘门 消防车卷帘门 消防车卷帘门 计算机电缆 流量计厂家 超声波液位计 智能型扩散硅压力变送器 开关柜 超声波液位计 智能型压力变送器 安徽天康 流量计生产厂家 压力表厂家 不锈钢压力表 有机玻璃管 计算机电缆 自限温电伴热带