今天突然想到那只在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. hibernate 连接oracle数据库的配置 (参考)

    <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          &qu ...

  2. Operational Amplifiers

    1>.Operational Amplifiers:different from the resistor,the inductor and the capacitor,it's a multi ...

  3. 作业七:团队项目——Alpha版本冲刺阶段006

    今日进展:完成主体代码. 今日安排:对程序主体进行编写.

  4. 深入理解unslider.js源码

    最近用到了一个挺好用的幻灯片插件,叫做unslider.js,就想看看怎么实现幻灯片功能,就看看源码,顺便自己也学习学习.看完之后收获很多,这里和大家分享一下. unslider.js 源码和使用教程 ...

  5. 一个非常有意思的css3属性filter

    filter这属性貌似可以是img图片在黑白与彩色间转换 filter:grayscale(1)为黑白色,filter:grayscale(0)位彩色,可以用于hover效果 img:hover{fi ...

  6. MVC3之ViewData与ViewBag

    首先先用代码来说话: ViewData: public ActionResult Index() { List<string> colors = new List<string> ...

  7. How to upgrade Subversion on OSX

    How to upgrade Subversion on OSX http://andowebsit.es/blog/noteslog.com/post/how-to-upgrade-subversi ...

  8. 团队开发——冲刺2.g

    冲刺阶段二(第七天) 1.昨天做了什么? 编写软件计划书第三阶段:整理用户体验建议:据用户对界面的要求,把小球改头换面,借鉴超级马里奥叔叔的道具们. 2.今天准备做什么? 最后的美工,统一整合: 测试 ...

  9. A与B相交后的图形查询

    按照A与B图形得到相交后的图斑 <!-- <%@ Page Language="C#" AutoEventWireup="true" CodeBeh ...

  10. ASP.NET MVC3的学习

    ASP.NET MVC第一次课(2013-12-25晚学完)     1.ASP.NET MVC 的特点       分离任务          可扩展        强大的URL重写(路由)机制   ...