解决多次异步请求紊乱问题 - JavaScript
加入目前的需求这样的:
左边的菜单链接,点击后通过异步请求返回其HTML代码,然后innerHTML到右面的DIV中,加入切换菜单的速度非常快,最终会导致请求紊乱。
可以加入消息管理机制,下面一个例子,代码没有优化,只提供思路。
1. [代码][JavaScript]代码
// 在DOMready的时候创建一个消息管理器messageMgr,包含一个队列(Queue),增(Create)、删(Remove)、判断(isAvailable)函数。
//给每个module设置一个Action,此Action必须有init,dispose方法,init方法先Create一个时间戳(Token),压入Queue并返回给Action保持。异步请求的时候携带该Token,在callback函数执行之前判断(isAvailable)此Token是否在Queue中,防止非正常的回调。ppt素材
//只有当该Action被销毁(dispose)的时候删除该Token,然后操作其他的事件卸载(onBind).
var messageMgr = {
__Queue: [],
Create: function(){
var __key = new Date().getMilliseconds();
this.__Queue.push(__key);
return __key;
};
Remove: function (token) {
token && baidu.array.remove(this.__Queue, token);
},
isAvailable:function (token) {
return baidu.array.contains(this.__Queue, token);
}
};
var asyn = function(url, data, opt){
opt = opt || {};
//异步请求对象
var __callBack = function(xhr, responseText){
if(opt.token && !messageMgr.isAvailable(opt.token)) return false;
opt.callback && opt.callback(xhr, responseText);
};http://www.huiyi8.com/ppt/
baidu.ajax.request(url, {
method: opt.method || "post",
data: data,
onsuccess: __callBack,
timeout: options.timeout || 600000,
onfailure:function () {
alert("网络传输异常。");
}
});
};
var blogCat = function(){
var __token = null;
var __asynRequest = function(){
var __callBack = function(list){
//渲染列表操作
}
var __data = {};
messageMgr.asyn("/remoteHC.php", __data, {
token: __token,
callback : __callBack
});
};
var __init = function(){
//绑定事件其他操作
__token = messageMgr.Create();
};
var __dispose: function(){
//出栈
messageMgr.Remove(__token);
};
return {
init: __init,
dispose: __dispose
}
}();
解决多次异步请求紊乱问题 - JavaScript的更多相关文章
- 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...
- promise处理多个相互依赖的异步请求
在项目中,经常会遇到多个相互依赖的异步请求.如有a,b,c三个ajax请求,b需要依赖a返回的数据,c又需要a和b请求返回的数据.如果采用请求嵌套请求的方式自然是不可取的.导致代码难以维护,如何请求很 ...
- Javascript异步请求你能捕获到异常吗?
Javascript异步请求你能捕获到异常吗? 异常处理是程序发布之前必须要解决的问题,不经过异常处理的应用会让用户对产品失去信心.在异常处理中,我们一贯的做法是按照函数调用的次序,将异常从数据访问层 ...
- JavaScript 之 异步请求
一. 1.异步(async) 异步,它的孪生兄弟--同步(Synchronous),"同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排 ...
- .Net MVC5异步请求Entity Framework 无限循环解决方法
.Net MVC5异步请求Entity Framework 无限循环解决方法 Entity Framework 存在一对多.多对多之间的关系,相互依赖,在返回JSON数据时往往会出现相互引用造成的无限 ...
- 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。
问题描述: 1.我使用axios异步请求后台的图片进行渲染后不能实现循环轮播,也就是loop失效,但是静态写死的情况下不会出现这种问题. 2. 分析: swiper的机制是:初始化的时候将swiper ...
- javascript for循环+异步请求导致请求顺序不一致
工作中遇到一个问题 for循环,再把循环出来的ID再进行二次请求 这就导致一个问题 请求结果返回顺序不一致 原因:异步请求会把回调事件放入微任务事件队列,宏任务执行完毕再执行微任务,具体参考事件队列机 ...
- [转载]# Ajax异步请求阻塞情况的解决办法
最近使用ExtJs4的mvc模式在开发了在线漫画的后台,因为异步请求比较多,有的回应时间长,有点短.我发现在多次并发的情况下,会造成阻塞的情况.也就是说如果回应时间长的请求还在进行中,短的请求却被挂起 ...
- Ajax异步请求阻塞情况的解决办法
最近使用ExtJs4的mvc模式在开发了在线漫画的后台,因为异步请求比较多,有的回应时间长,有点短.我发现在多次并发的情况下,会造成阻塞的情况.也就是说如果回应时间长的请求还在进行中,短的请求却被挂起 ...
随机推荐
- 用spring annotation声明的bean,当打包在jar中时,无法被扫描到
发现一个问题,十分蛋疼. 我们项目是由N个工程组成的,外围工程是web工程,内部的工程打包成jar,放入外围工程的WEB-INF/lib 内部的工程用到了spring的注解,例如@Service.@C ...
- Couchbase V(管理任务)
Couchbase V(管理任务) 多读写 在Couchbase2.1中支持硬盘多读些(Multi- Readers and Writers),一般双核4G服务默认3个thread 4核16G内存一个 ...
- [vijos1159]岳麓山上打水
[vijos1159]岳麓山上打水 试题描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. ...
- MTK andorid从底层到上层添加驱动
1 [编写linux驱动程序] 1.1 一.编写驱动核心程序 1.2 二.配置Kconfig 1.3 三.配置Makefile 1.4 四.配置系统的autoconfig 1.5 五.编译 2 [编写 ...
- BZOJ1693: [Usaco2007 Demo]Asteroids
n<=500 *n的格子,给m<=10000个格子有人,一炮可以清掉一行或一列的人(莫名的爽!)求最少几炮干掉所有人. 经典二分图模型!行成点,列成点,一个点就连接一行一列,表示这一行或这 ...
- ubuntu,CentOS永久修改主机名
1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后: 其二,在终端窗口中输入命令:hostna ...
- WKWebView的了解
1. http://blog.csdn.net/chenyong05314/article/details/53735215 2. http://www.jianshu.com/p/6ba250744 ...
- dpr——设备像素比(device pixel ratio)
设备像素比 = 物理像素 / 逻辑像素 1.物理像素 显示器上最小的物理显示单元(像素颗粒),在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值. 例如:手机大小固定,物理像素越高,画面越清晰 ...
- Match the string--hdu1797(模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=1797 就是模拟 我的思路是标记aba 和h的位置 然后就判断是否正确 就行了 还有就是 最后 fkfkfkf ...
- Ubuntu 16.04关闭Alt+鼠标左键移动窗口(转)
1.打开终端,菜单-编辑-配置文件首选项-命令,勾上“以登录Shell方式运行命令”,重启终端. 2.在终端输入 gsettings get org.gnome.desktop.wm.preferen ...