千家信息网

如何解决多个Ajax请求执行返回先后的问题

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要讲解了"如何解决多个Ajax请求执行返回先后的问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何解决多个Ajax请求执行返回先后的问题
千家信息网最后更新 2025年01月19日如何解决多个Ajax请求执行返回先后的问题

这篇文章主要讲解了"如何解决多个Ajax请求执行返回先后的问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何解决多个Ajax请求执行返回先后的问题"吧!

有时候在一个业务事件处理流程上,可能会遇到点击了一个按钮或者其他事件触发了一个动作

需要执行两个以上的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;}

感谢各位的阅读,以上就是"如何解决多个Ajax请求执行返回先后的问题"的内容了,经过本文的学习后,相信大家对如何解决多个Ajax请求执行返回先后的问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 问题 先后 多个 顺序 排序 事件 情况 两个 函数 大小 数组 答案 学习 内容 变量 思路 数据 有时候 正在 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库应用技术vfp6.0 银川市网络安全竞赛 广东数据网络安全工程联系方式 服务器安全模式下拷贝东西吗 网络安全大会 11岁 宝山区什么是网络技术服务 1288v3服务器白皮书 数据库的岗位有哪些 软件开发过程中常用到的软件 刀剑2服务器哪个是新服 服务器远程管理端口配置 玛特互联网科技广州有限公司 接口测试提取数据库数据库 数据库筛选两个表相同 电子商务的本质网络技术 开封市高校网络安全教育 第九章网络安全思维导图 数据库中的一个记录包含什么 软件开发分享主题 oracle怎么查找多个数据库 linux 服务器空间 mongo如何删除数据库 南川区一站式软件开发流程代理商 网络安全法技能大赛题 如何卸载网站服务器安全狗 计算机网络技术硕士指定科目 数据库idx排列 电脑数据库实用软件 服务器工程师做什么的 河源单位食堂智慧餐饮软件开发
0