模拟ajax的同异步
今天突然想到那只在app中,如果请求数据时用的是app提供的接口,如果该接口没有同异步的话,怎么办。
所以就捣腾了下。 模拟ajax同异步。
var VshopDataApi = {
queryArr : [], // { code : [{code, data, callback, is_sync}]}//系统队列
is_sync : false, //是否同步 默认false 不同步 系统变量
ajax : function(item, callback){ //自定义
// var time = parseInt(Math.random() * 100);
// console.log('+++++发送成功+'+item.code+'+++++');
// setTimeout(function (){
// //模拟 不定时回调
// callback( '顺序:'+item.code+' '+(item.is_sync ? '同步' : '异步'));
// }, time * 100);
}
}
/**
* 进队列
* @param {object} item 必须包含 字段 callback:回调函数, is_sync:是否同步
*/
VshopDataApi.push = function(item){
item.is_sync = item.is_sync || false;
if (this.is_sync) {
this.queryArr.push(item);
return;
}
if (item.is_sync) {
this.is_sync = item.is_sync;
}
//发送
VshopDataApi._ajax(item);
};
//出队列
VshopDataApi.shift = function(){
if (this.queryArr.length <= 0) {return;}
var item = {};
item = this.queryArr.shift();
this.is_sync = item.is_sync;
this._ajax(item);
if (!this.is_sync) {
this.shift();
}
};
//系统执行
VshopDataApi._ajax = function(item){
var _this = this;
(function(item){
_this.ajax(item,function(result){
item.callback(result);
if (item.is_sync) {
_this.shift();
}item = null;
});
})(item);
};
//回调函数
function callback(result){
console.log('---------callback begin----------');
console.log(result);
console.log('--------callback end---------');
};
//重写
VshopDataApi.ajax = function(item, callback){ //自定义
var time = parseInt(Math.random() * 100);
console.log('+++++发送成功+'+item.code+'+++++');
setTimeout(function (){
//模拟 不定时回调
callback( '顺序:'+item.code+' '+(item.is_sync ? '同步' : '异步'));
}, time * 100);
}
//进队列
VshopDataApi.push({code : '1', data: {}, callback : callback, is_sync : false });
VshopDataApi.push({code : '2', data: {}, callback : callback, is_sync : true });//同步
VshopDataApi.push({code : '3', data: {}, callback : callback, is_sync : false });
VshopDataApi.push({code : '4', data: {}, callback : callback, is_sync : false });
VshopDataApi.push({code : '5', data: {}, callback : callback, is_sync : true });//同步
VshopDataApi.push({code : '6', data: {}, callback : callback, is_sync : false });
VshopDataApi.push({code : '7', data: {}, callback : callback, is_sync : true });//同步
VshopDataApi.push({code : '8', data: {}, callback : callback, is_sync : false });
回调时特地写个随机时间。 看看如果同步的先执行成功,会不会继续执行。
结果:

模拟ajax的同异步的更多相关文章
- 模拟ajax的 script请求
/** * 模拟ajax的 script请求 * @param {[type]} options [description] * @return {[type]} [description] */ f ...
- 使用AJAX技术发送异步请求,HTTP服务端推送
使用AJAX技术发送异步请求 什么是AJAX AJAX指一步Javascript和XML(Asynchronous JavaScript And XML),它是一些列技术的组合,简单来说AJAX基于X ...
- 利用gulp搭建本地服务器,并能模拟ajax
工作中可能会用到的小工具,在此记录一下.可以实现的功能有: 本地http服务器 页面实时刷新 可以模拟ajax请求 第一步,新建package.json文件.用到了gulp.gulp-webserve ...
- jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法
jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法 在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...
- AJAX同步改异步
var temp; $.ajax({ async: false, type : "POST", url : defaultPostData.url, dataType : 'jso ...
- 使用 jQuery Mockjax 插件模拟 Ajax 请求
在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了.这时候我有这么一个 Ajax 请求需要从后台获取数据: $.ajax({ url: '/products/' }).done(f ...
- ajax同步,异步
传输数据 同步:第一条传过去,对方接收到反馈以后,再传第二条; 异步:第一条传过去,不管对方有没有收到,继续传第二条. ajax(默认异步 async:true) 同步:执行完ajax内部代码,才执行 ...
- Ajax与ashx异步请求的简单案例
Ajax与ashx异步请求的简单案例: 前台页面(aspx): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- VueJS搭建简单后台管理系统框架 (二) 模拟Ajax数据请求
开发过程中,免不了需要前台与后台的交互,大部分的交互都是通过Ajax请求来完成,在服务端未完成开发时,前端需要有一个可以模拟Ajax请求的服务器. 在NodeJs环境下,通过配置express可访问的 ...
随机推荐
- Delphi 有关Dbgrideh控件:变色处理
procedure OnDrawColumnCell( Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; ...
- Ant介绍
今天介绍一下Ant,Ant是基于Java的跨平台构建工具,它易于使用,并且可扩展.可升级.它既可以用于小的个人项目,也可以用于大型的.多组协同的软件项目. 在我们的项目开发中,为了构建一个软件产品,我 ...
- [windows操作系统]目录和文件相关操作
1.导出目录的树形结构到文本文件 tree /F d:\dir1 > d:\tree.txt 就是将d:\dir1的目录结构以树状形式输出报告到文件tree.txt中. 效果是这样的:
- Linux网络编程(多人在线聊天系统)
一.首先是服务器的建立 首先是一个信号终止程序,发信号ctrl+c终止程序,而是是初始化网络通信. 创建一个描述符负责绑定服务器和监听服务器接收客户端的消息. socket()->sockadd ...
- wp8开发笔记之开发环境的搭建
开发工具的下载: Windows phone sdk 8.0下载地址: http://www.microsoft.com/ZH-CN/download/details.aspx?id=35471 开发 ...
- 关于u盘启动,关于UEFI,关于hp手提计算机
这个国庆前夕,遇到点麻烦了:一台新的手提计算机,按照常规方法不能用u盘启动引导.导致也无法做备份.所以,研究了不少小时哦...终于也可以解决的. 关于u盘启动,一般常用的有:u大侠(推荐),大白菜(不 ...
- 【python】实用函数啥的
1.测试运行时间/效率 t = time() print time() -t 2.C:\python344\Scripts easy_install.exe ,提供包的名字,可以自动下载+装包 3 ...
- 一些Layout的坑
iOS这个东西,初学感觉,还好还好,然后一年之后再来修复一下初学的时候的代码,我只是感觉头很晕- - 别扶我. AutoLayout的坑,明明以前都没有的!!!升了iOS10就突然发现了这个坑,其实也 ...
- eclipse中如何打jar包
在eclipse中写个小测试程序(需要用到第三方jar文件),打成jar文件,然后到linux下执行做测试,查了很多资料也没有说怎么把第三方jar打入jar,使用ant,又太麻烦. 1 选择Mai ...
- Maven项目下java.lang.ClassNotFoundException的解决方法
问题背景: Maven的project下,项目中已经引用了相应的jar包.Java class中没有语法错误,在执行时报ClassNotFound.检查了Maven的pom.xml,依赖引入正常. 错 ...