模拟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可访问的 ...
随机推荐
- React Native 打包.jsx文件
最近在研究React Native.感觉开发效率确实不错,但jsx语法写起来感觉不怎么顺手. 试用了Sublime Text 3和Visual Studio Code写代码,感觉反应总是慢一拍. 还是 ...
- HDU 1405
题意: 输入一个数n,输出它的素因子与这个素因子出现的次数. 分析: 用欧拉函数,变下形就好了,不再过多解释. 代码如下: #include <iostream> #include < ...
- 手把手教你在ubuntu上安装apache和mysql和php
1:首先安装apache:打开终端(ctrl+Alt+t), 输入命令:sudo apt-get install apache2即可安装, 安装完后,打开浏览器,在地址栏输入:localhost或者h ...
- VMware下利用ubuntu13.04建立嵌入式开发环境之四
二.telnet.SSH服务器安装与配置 1.telnet 1.1 安装服务器:apt-get install xinetd telnetd 1.2 安装openbsd-inetd:apt-get i ...
- 线程的2个ID
我们知道进程ID是操作系统调度的最小单位,有时候根据业务的需要,我们会使用到多线程技术,当创建了多个线程时,也会有一个线程ID,那这个线程ID和进程ID有什么不一样吗? 其中,线程组的线程ID是属于N ...
- 对Spring AOP的理解
AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善. AOP在spring ...
- SparkMLlib之 logistic regression源码分析
最近在研究机器学习,使用的工具是spark,本文是针对spar最新的源码Spark1.6.0的MLlib中的logistic regression, linear regression进行源码分析,其 ...
- Android异步消息处理机制
安卓子线程无法直接更改UI,所以需要异步消息处理机制来解决 <?xml version="1.0" encoding="utf-8"?><Li ...
- 生成highcharts报表时对数据没有用= eval('([' + seriesArray+ '])')处理生成数组,而是简单的拼成字符串,结果导致大量的场景出现
<script type="text/javascript"> //异步初始周达成率趋势图信息 function goFinishQuery() { var yearN ...
- 普通硬件就能破解GSM A5加密算法
如果你还在使用基于早期信号标准的GSM手机,那么你最好在使用手机的过程中小心一点了.因为根据国外媒体的最新报道,安全研究专家通过测试发现,他们只需要使用三张NVIDIA GeForce GTX690显 ...