今天突然想到那只在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的同异步的更多相关文章

  1. 模拟ajax的 script请求

    /** * 模拟ajax的 script请求 * @param {[type]} options [description] * @return {[type]} [description] */ f ...

  2. 使用AJAX技术发送异步请求,HTTP服务端推送

    使用AJAX技术发送异步请求 什么是AJAX AJAX指一步Javascript和XML(Asynchronous JavaScript And XML),它是一些列技术的组合,简单来说AJAX基于X ...

  3. 利用gulp搭建本地服务器,并能模拟ajax

    工作中可能会用到的小工具,在此记录一下.可以实现的功能有: 本地http服务器 页面实时刷新 可以模拟ajax请求 第一步,新建package.json文件.用到了gulp.gulp-webserve ...

  4. jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法

    jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法   在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...

  5. AJAX同步改异步

    var temp; $.ajax({ async: false, type : "POST", url : defaultPostData.url, dataType : 'jso ...

  6. 使用 jQuery Mockjax 插件模拟 Ajax 请求

    在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了.这时候我有这么一个 Ajax 请求需要从后台获取数据: $.ajax({ url: '/products/' }).done(f ...

  7. ajax同步,异步

    传输数据 同步:第一条传过去,对方接收到反馈以后,再传第二条; 异步:第一条传过去,不管对方有没有收到,继续传第二条. ajax(默认异步 async:true) 同步:执行完ajax内部代码,才执行 ...

  8. Ajax与ashx异步请求的简单案例

    Ajax与ashx异步请求的简单案例: 前台页面(aspx): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

  9. VueJS搭建简单后台管理系统框架 (二) 模拟Ajax数据请求

    开发过程中,免不了需要前台与后台的交互,大部分的交互都是通过Ajax请求来完成,在服务端未完成开发时,前端需要有一个可以模拟Ajax请求的服务器. 在NodeJs环境下,通过配置express可访问的 ...

随机推荐

  1. React Native 打包.jsx文件

    最近在研究React Native.感觉开发效率确实不错,但jsx语法写起来感觉不怎么顺手. 试用了Sublime Text 3和Visual Studio Code写代码,感觉反应总是慢一拍. 还是 ...

  2. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  3. 移除project,testsuite,testcase级别所有的custom properties

    // Remove all custom properties on Project level. If removed, custom properties cannnot be injected ...

  4. build and set proxy in Ubuntu

    build http://www.2cto.com/os/201310/249690.html set http://www.360doc.com/content/11/1112/00/2617151 ...

  5. 一个百万数量级的mysql实例

    1.想做数据库调优的学习首先就要有一个较大数据集合的实例,在网上找了很久都没有找到具体的实例,后来在书中看到了employees_db字样,发现 mysql官方提供了一个做测试的较大的数据集,这正是我 ...

  6. Best Coder Round#25 1003 树的非递归访问

    虽然官方解释是这题目里的树看作无向无环图,从答案来看还是在“以1作为根节点”这一前提下进行的,这棵树搭建好以后,从叶节点开始访问,一直推到根节点即可——很像动态规划的“自底向上”. 但这棵树的搭建堪忧 ...

  7. C++ mem_fun 和 mem_fun_ref 的用法

    假设我们有以下的一个类: 另外有一个包含 class A 对象的数组: vector<A> vec; 如何对每一个类的对象调用成员函数print. 做法1: 利用下标 for(int i= ...

  8. Android ListView 多样式Item的一个注意点:(

    闲来无事,在写一个多样式Item的ListView的Demo时,遇到了一个以前没遇过的问题; ╮( ̄▽ ̄")╭ 我们知道,ListView里可以有多种样式的item, 实现只需要重写: @O ...

  9. Configure the Windows Firewall to Allow SQL Server Access

    参考微软链接: https://msdn.microsoft.com/zh-tw/library/cc646023.aspx

  10. ThinkPHP 自动验证相关注意

    1.假如加入了表单令牌的话,表单的各种名与对应Model字段一致,不然报坑爹的令牌错误. 2.假如加入了表单令牌的话,Create只能采用默认的POST数据创建数据对象,不然又是坑爹的令牌错误. 3. ...