有时候在一个业务事件处理流程上,可能会遇到点击了一个按钮或者其他事件触发了一个动作
需要执行两个以上的Ajax请求,但是可能要顾虑到Ajax请求执行的先后顺序,有时候Ajax请求顺序出问题,会导致各种问题
例如现在有两个ajax事件,分别为ajax1 ,ajax2
一个叫做main的方法调用执行入口
1.
function main(){ ajax1(data,callback); ajax2(data,callback); }
如果我们按照上面的方法去执行,表面上看似乎是让ajax1先执行,ajax2后执行。如果不仔细想,有些人会认为ajax1先执行完,之后才会执行ajax2.事实上真的会如此吗?
答案是 不一定 。当然对于有多个ajax请求对执行返回顺序没要求的情况,我们不需要过多考虑谁先执行,谁先返回的
那要是考虑ajax事件执行先后顺序以及返回顺序呢
要是这样那怎么解决ajax事件的执行返回先后顺序呢
当然现在你应该会想到ajax回调函数,Good,这是一个好主意
现在按这种思路改变一下方法,方法如下
function main(){ ajax1( data , ajax2( ) ); }
这样看起来,你是不是觉得Very Good呢?真的吗?真的是Very Good吗?
Maybe,But in some case ,这样写可能有些不方便,当然也许你可能不会遇到,但是我遇到了一种比较特殊的情况
比如下面这种可能
function main(){ aa(data); ajax1(data,callback); } function aa(val){ var data=val+"";//这里是对传入数据进行修改,封装,当然这里是随便写的 ajax2(data,ajax2Callback); } function ajax2Callback(){ console.log("=====回调函数ajax2Callback()执行========"); console.log("=====这里正在执行ajax执行完毕后必须执行的操作========"); }
你认为这种情况可以满足ajax2在ajax1先执行并且先执行完毕吗
仔细想想你会发现得到答案
No!
Now ,How to solve this proplem . How to make sure ajax2 finished before ajax1 .
当然,你可能会说,这不简单,把ajax1的调用放进ajax2方法回调方法ajax2Callback的最后面
不得不承认这是一种解决方案,但是如果是一个很古老的项目,已经做了好几年的项目了。里面调用复杂,要尽量去避免修改以前的底层方法,也许你为了修改这个bug,就这样简单解决了,你可能又会创造多个bug.
那到底还有没有好的方法去解决了?
Sure,solve it easy .但是工作经验不足的人很少会一下想到,只会用前面的办法草草解决问题,不管三七二十一。
而我采用了一种比较笨的方法,而且还存在一定问题,使用了setTimeOut定时器执行一次,但是问题想必大家都知道,谁知道这个Ajax会执行多久了,还好有大神指导了下我,
还记得对数组排序吗,说道这个,也许你会好奇,这与数组排序有啥关系。下面会告诉你答案
代码说明一切:
function main(){ var temp=ajax2Callback; ajax2Callback=function(){ temp(); ajax1(data,callback); } aa(data); ajax2Callback=temp; } function aa(val){ var data=val+"";//这里是对传入数据进行修改,封装,当然这里是随便写的 ajax2(data,ajax2Callback); } function ajax2Callback(){ console.log("=====回调函数ajax2Callback()执行========"); console.log("=====这里正在执行ajax执行完毕后必须执行的操作========"); }
看出来没,是不是很有趣,没有修改最低层的方法,仅仅修改了main方法,是不是很像数组排序里的当我们比较两个值大小时,不管你用冒泡排序,还是快速排序,是不是都设置了一个临时变量去存储值。当然排序比较大小时,你可以没必要设置临时变量,仅仅用一个^运算符去做赋值比大小,甚至你可以偷懒到直接调用系统的Arrays.sort()方法,当然这都可以
function changeSearchContactType(obj) { if (!obj) { return; } var contactType = obj.value; var origRenderTemplate = renderTemplate; renderTemplate = function(data) { origRenderTemplate(data); ajaxAnywhere.submitAJAX('setSearchContactType'); } var result = TemplateHelper.changeSearchContactTemplate(contactType, contactUIUID); renderTemplate = origRenderTemplate; return result; }
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]