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

需要执行两个以上的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请求执行返回先后的问题示例探讨的更多相关文章

  1. ajax请求post和get的区别以及get post的选择

    这篇文章主要介绍了ajax请求post和get的区别以及get post的选择,需要的朋友可以参考下

  2. jQuery进阶实践之利用最优雅的方式如何写ajax请求

    ajax请求相信对大家来说都不陌生,下面这篇文章主要介绍了jQuery进阶实践之利用最优雅的方式如何写ajax请求的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

  3. ajax在js中和jQuery中的用法实例详解

    Ajax被认为是(Asynchronous(异步) JavaScript And Xml的缩写),现在允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax,下面这篇文章主要给大家介绍了关于ajax在js中和jQuery中的用法,需要的朋友可以参考下

  4. 关于前端ajax请求的优雅方案(http客户端为axios)

    这篇文章主要给大家介绍了关于前端ajax请求的优雅方案,本文http客户端为axios,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

  5. Ajax请求中async:false/true的作用分析

    这篇文章主要介绍了Ajax请求中async:false/true的作用,结合实例形式分析说明了Ajax请求中async:false/true的具体功能与使用技巧,需要的朋友可以参考下

  6. php判断是否为ajax请求的方法

    这篇文章主要介绍了php判断是否为ajax请求的方法,结合实例形式分析了ajax请求的原理及后台针对ajax请求的判断技巧,需要的朋友可以参考下

  7. ie发送ajax请求返回上一次结果的解决方法

    这篇文章主要介绍了ie发送ajax请求返回上一次结果的解决方法,需要的朋友可以参考下

  8. herf=#导致Ajax请求时没有向后台发送数据

    当点击重命名进行Ajax请求时,并没有向后台发送数据而是直接跳转到了首页,后来发现是这个herf=#惹的祸

  9. AJAX请求是否真的不安全?谈一谈Web安全与AJAX的关系

    Ajax中没有固有的安全漏洞,但是对该技术向量的适配显著地改变了网络应用的开发途径以及方法论。AJAX请求的安全性是大家经常会谈论的一个话题,AJAX请求是否真的不安全?下面这篇文章就来给大家详细谈一谈Web安全与AJAX关系的相关资料,需要的朋友可以参考下。

  10. 判断请求头中是否含有某属性来判断是否是ajax请求

    本文为大家介绍下如何判断请求头中是否含有某属性来判断是否时ajax请求,具体示例如下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部