模拟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可访问的 ...
随机推荐
- MYSQL5.7无法启动服务原因及解决方案
mysql5.7安装完成后,想要把它发布成windows服务: 首先,应该配置新的配置文件,然后将cmd打开到安装目录的bin文件,键入: mysqld --default-file="D: ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- people have been arrested under other offences instead.
Homosexuality is not explicitly banned in Egypt but gay people have been arrested under other offenc ...
- 一个比较综合的项目--》>图片缓存,下拉刷新等
在办公室电脑(E:\workspace\23\Collections)
- 【python】属性
在python中,一切皆是对象(object),对象拥有很多属性(arrtribute) 属性分2种 类属性(class attribute):类自身定义or继承 对象属性(object attrib ...
- GreenDao数据库框架的配置与增删改查
并非原创,原创地址http://blog.csdn.net/njweiyukun/article/details/51893092 配置-------------------------------- ...
- 关于mybatis一对多关联时
一对多关联时注:collection标签,property属性名称,column参数字段, ofType查询返回类型,select查询方法,javaType方法的返回类型
- Three.js typescript definitely typed 文件
最近学习three.js,想用typescript编写代码,去http://definitelytyped.org/找了一圈没有发现three.js的definitely typed文件. 好吧,花了 ...
- linux下解压war文件命令
jar -xvf project.war -->解压到当前目录下. -f 指定 JAR 文件名,通常这个参数是必须的 -v 显示过程信息
- jython安装
下载了jython后:http://www.cr173.com/soft/9719.html 这是我当时下载的网站 官网很慢开始->运行->cmd->打开dos命令窗口,转到jyth ...