当前位置:主页 > 聚焦 >

快来看看 ajax实时刷新处理

时间:2020-12-11 17:27:50

  ajax教程栏目介绍实时刷新处理

  (免费):ajax教程
 

  作为一个老前端,本案例是基于jquery来写的。

  前端渲染页面拿数据,无非就是ajax、socket,其他的暂时没有用过,但项目还是使用ajax比较多。

  下面来看一下一个简单基于ajax短轮询的请求

  function req() { $.ajax({ type: 'get', url: 'demo.php', dataType: 'json', success: function(res) { console.log(res); }, error: function() { console.log('请求失败~'); } }); } req(); setInterval(req, 3000);

  如果网速快而稳定的话,可以这样使用,但网速谁能确定呢,如果网速不稳定的线秒,这样就会造成ajax请求堆积,近而引发不可估量的问题,那么怎样去避免这个问题呢?

  方式一:给请求赋上一个变量,然后每次轮询先abort掉上一个请求

  var ajaxReq = null; function req(isLoading) { if(ajaxReq !== null) { ajaxReq.abort(); ajaxReq = null; } ajaxReq = $.ajax({ type: 'get', url: 'demo.php', dataType: 'json', beforeSend: function() { if(isLoading) { $('.zh-loading').show(); } }, success: function(res) { console.log(res); }, complete: function() { if(isLoading) { $('.zh-loading').hide(); } }, error: function() { console.log('请求失败~'); } }); } req(true); setInterval(function() { req(false); }, 3000);

  猛一看,感觉还行,差不多就OK了,但作为前端的我们要不断的去寻找更合适的方式,所以有个下面这个。

  方式二:每一次轮询都判断上一次请求是否完成,完成了才会执行下一次的请求()

  上面的 isLoaded && req({"init": 0}); 表示前面一个条件正确,则执行&&后面的方法

  正常的写法是

  if(isLoaded) req({"init": 0});

  另外注意一点:isLoaded=true 要在complete里加,如果只在success里加的话, 请求失败了就不会轮询再请求了。complete不管success或error都会执行

  代码就到这里了,thank you for attention~

  相关免费学习:javascript

热点推荐
1 分析师:欧盟MICA截止日期将使1000万用户

消息,欧盟的市场加密资产截止日期将于7月1日到来,可能使超过1000万名欧洲加密用户面临寻...

2 以防长称美方施压迫使以军改变对黎真主

消息,当地时间29日,以色列国防部长卡茨日前在与军事记者的闭门谈话中披露,受美国政府施...

3 Bitdeer签署挪威数据中心机柜托管协议

消息,Bitdeer宣布,其全资子公司Tydal Data Center AS已就挪威Tydal AI数据中心签署一项机柜托管租赁...

4 创作者费用:如何通过交易获得持续收益

创作者费用是指在memecoin启动平台上,创建代币的人可以从每笔交易中获得的一部分收益。这一...

5 贝莱德与Ethena Labs深化合作,支持稳定币

消息,贝莱德与Ethena Labs宣布深化合作,贝莱德机构投资管理平台Aladdin将进一步支持Ethena的稳...

6 币界晚讯 比特币ETF六月流出创纪录,达

6月29日消息: 1. 比特币ETF六月流出创纪录,达40亿美元; 2. 比特币网络首次成功挖出区块使用...

7 Strategy上周未增持比特币,目前总持仓为

消息,据onchain lens监测,Strategy上周未增持比特币,目前总持仓为84.7363万枚,按当前价格计算...

8 Abraxas Capital主地址ETH空单平仓止盈

消息,Abraxas Capital主地址的ETH空单已完全平仓,平仓前持仓规模为1,035,004.51美元,地址为0x5b...

9 贝莱德向Coinbase存入7432枚BTC和8150枚ETH,价

消息,据Onchain Lens监测,贝莱德向Coinbase存入7432枚BTC,价值约4.4638亿美元,以及8150枚ETH,价值...

10 伊朗官员称本周未安排技术工作组会议

伊朗副外长加里巴巴迪在回应记者关于旨在结束强加战争的谅解备忘录框架下的工作组谈判相...

成都来彰科技 蜀ICP备2025134723号-1

资讯来源互联网,如有版权问题请联系管理员删除。