关于多个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请求执行返回先后的问题

时间: 2024-10-11 04:23:57

关于多个Ajax请求执行返回先后的问题的相关文章

ajax请求firefox返回NS_BINDING_ABORTED

在ligergrid中请求链接,post提交,返回NS_BINDING_ABORTED. 是因为ligergrid中默认是异步提交方式,如果没有设置同步的话, 在请求该链接的时候第一次请求还没有执行完毕,如果又发生了第二次请求的话, 第一个请求就会中断,从而返回NS_BINDING_ABORTED. ajax请求firefox返回NS_BINDING_ABORTED

Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题

//php中的数组数据格式 Array ( [all] => Array ( [title] => ALL [room_promotion_id] => all ) [best_available_rate] => Array ( [title] => Best Available Rate [room_promotion_id] => best_available_rate ) [30] => Array ( [room_promotion_id] =>

Ajax请求ashx 返回 json 格式数据常见问题

问题:ashx 返回的字符串json格式,在前台ajax自动解析失败. 问题分析:经过排查,发现是拼接json时出现” ’  “单引号,jquery无法解析,用” “ “双引号才可以.例如: string strjson="[ { 'userName':'test'}]"; //单引号导致jquery无法自动解析. string strjson="[ {\"userName\":\"test\"}]"; // 双引号可以解析:

SpringMVC Ajax请求时返回json中文字符串的乱码问题的解决方案

1.org.springframework.http.converter.StringHttpMessageConverter类是处理请求或相应字符串的类,并且默认字符集为ISO-8859-1,所以在当返回json中有中文时会出现乱码. 2.StringHttpMessageConverter的父类里有个List<MediaType> supportedMediaTypes属性,用来存放StringHttpMessageConverter支持需特殊处理的MediaType类型,如果需处理的Me

ajax请求成功返回200,但还是进入error事件

ajax请求成功返回200,但还是进入error事件. 出错原因: 前台dataType:"json",而后台返回的数据不符合json规范. 解决方案有两种: 1.前台:让ajax数据返回类型为text而不是json:即dataType: "text"; 2.后台:修改后台返回值 原文地址:https://www.cnblogs.com/Fourteen-Y/p/11307392.html

想抛就抛:Application_Error中统一处理ajax请求执行中抛出的异常

女朋友不是想抛就抛,但异常却可以,不信请往下看. 今天在MVC Controller中写代码时,纠结了一下: public async Task<ActionResult> Save(int? postId) { if(!IsOwner(postId.Value, userId)) { //抛不抛异常呢? } } 在这个地方要不要抛异常呢? 如果不抛异常,就得这么写: public async Task<ActionResult> Save(int? postId) { if(!I

JQuery ajax请求一直返回Error(parsererror)

项目中common.js中有一段ajax异常处理方法: $(document).ajaxComplete(function(event,xhr,options) { if (xhr.statusText=="parsererror") { top.location.href="/admin"; } }); 有一个异常页面的ajax请求如下: $.ajax({ type :"post", url :"XXXXXXXXXXXXXXXXXXX

使用ajax请求SpringMVC返回Json出现乱码解决方法

1:在使用ajax请求后台访问数据的数据,后台返回的数据是乱码,带??问号的乱码,之前还一直没有遇到过,在这里记录整理一下,贴出解决代码! (1):前台使用ajax ,已经设定返回的结果为json格式!ajax代码不贴出来了! (2):后台代码 @RequestMapping(value = { "/hello/{uuid}" }, method = RequestMethod.GET /*,produces = "text/html;charset=UTF-8"*

关于ajax请求,返回json数据格式

使用servlet测试 后台数据为:返回类型没有设置(方式一) 1 String str = "["+ 2 "{ id:1, pId:0, name:\"可折腾的父节点 1\", t:\"我很普通,随便 展开/折叠 我吧\", open:false},"+ 3 "{ id:11, pId:1, name:\"叶子节点 - 1\", t:\"我老爸很普通,随便折腾他吧\"},&q