在NeralJS思路整理一章中我们提到过实用ajax管理模块控制ajax请求,以减少ajax请求数量,优化加载,以下是ajax模块的实现,我已经确保经历简单。

/**
* Created by william on 2014/12/26.
*/
define(function () {
var events = require("EventBus"); function AjaxManager(serverURL) {
if (!serverURL || serverURL == "" || serverURL.length == 0)
throw "web服务地址未定义";
this.serverURL = serverURL;
this.request_list = [];
this.data_list = [];
} /**
* 添加请求到待发区
* @param requestInfo 数据格式{uid: 'kb123',dataRange: { start: '2014/11/8', end: '2014/-1/-1' }}
*/
AjaxManager.prototype.addRequest = function (requestInfo) {
this.request_list.push(requestInfo);
};
/**
* 发出保存在请求列表中的请求,请求完成时触发request_ready事件,注意data数据是一组key:value对
* @constructor
*/
AjaxManager.prototype.DoRequest = function () {
var self = this;
$.post(this.serverURL, this.request_list, function (data) {
for (var k in data) {
self.data_list[k] = data[k];
}
events.trigger(self, "request_ready", self.data_list);
});
this.request_list = [];//请求完成,清空请求队列
};
/**
* 订阅Ajax完成事件,该事件在ajax返回时被触发
* @param callback
* @constructor
*/
AjaxManager.prototype.OnReady = function(callback){
events.addListener(this,"request_ready",callback);
};
});

上面这个模块无法实现数据的定向推送,说以将整个this.data_list都开发给了每一个订阅者。这也是收到EventBus模块功能的局限性影响,不过对于网页来说,所有返回的数据本来就是要显示出来的,所以不存在安全性问题。暂时足够使用

AjaxManager的实现的更多相关文章

  1. NeralJS需求整理及思路

    NeralJs希望通过解析json数据,动态创建和渲染报表,每个报表呈现一定时间范围的数据,通过使用表格图表等不同的方式,使数据的呈现不死板,且更容易看出规律. 说通俗点,就是动态在一个区域内生成多张 ...

  2. 推荐60个jQuery插件(转)

    jQuery插件jQuery Spin Button自定义文本框数值自增或自减 jQuery插件JQuery Pager分页器实现javascript分页功能 jQuery插件FontSizer实现J ...

  3. Android+Jquery Mobile学习系列(6)-个人信息设置

    本节开始,进行代码的实战练习.我的这个App是管理保险客户信息的,数据采用Sqlite存储在本地手机上,第一次使用需要先登记自己的个人信息,这个功能非常简单,也无关紧要,我是拿这个练手,方便做后面复杂 ...

  4. Android+Jquery Mobile学习系列(3)-创建Android项目

    前两章分别对开发环境和Jquery Mobile基础知识进行了介绍,本章介绍创建一个Android项目,并使用WebView控件显示HTML数据. 首先创建一个Android Application项 ...

随机推荐

  1. css伪元素

    CSS 伪元素用于向某些选择器设置特殊效果. 1.:first-line 伪元素  "first-line" 伪元素用于向文本的首行设置特殊样式.注意:"first-li ...

  2. Ecshop后台菜单添加

    首先需要修改四个文件:inc_priv.php, inc_menu.php, priv_action.php, commn.php 假如当前的项要加在商品管理的菜单下 一:在languages/zh_ ...

  3. Js屏蔽键盘事件

    <script>           function KeyDown(){ //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键            //alert(& ...

  4. 大数据学习之测试hdfs和mapreduce(二)

    上篇已经搭建好环境,本篇主要测试hadoop中的hdfs和mapreduce功能. 首先填坑:启动环境时发现DataNode启动不了.查看日志 从日志中可以看出,原因是因为datanode的clust ...

  5. MFC枚举USB设备碰到的一个疑难,还没解决

    代码如下: 打开USB Hub设备之后,返回句柄hHubDevice,然后使用EnumerateHubPorts来枚举Hub的端 口.疑问在代码的中文注释中. bool CUsbEnumHub::En ...

  6. SCLButton

    import UIKit let kSuccessTitle = "Congratulations" let kErrorTitle = "Connection erro ...

  7. 【HDOJ】4325 Flowers

    树状数组+离散化的题目,一直在思考为什么结果不一样,后来才发现花开了就是开了不会再谢了. /* 4325 */ #include <iostream> #include <cstdi ...

  8. -_-#【Canvas】回弹

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. (转载)php之call_user_func_array的简易用法

    (转载)http://www.cnitblog.com/neatstudio/archive/2006/07/21/13990.html php之call_user_func_array的简易用法 今 ...

  10. LeetCode——Two Sum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...