• AjaxManager的实现


    在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模块功能的局限性影响,不过对于网页来说,所有返回的数据本来就是要显示出来的,所以不存在安全性问题。暂时足够使用

  • 相关阅读:
    流程控制语句
    表达式
    Hello word!
    JVM运行是内存模型
    Web | HTML学习笔记
    #Java学习之路——基础阶段(第七篇)
    #Java学习之路——基础阶段(第六篇)
    #Java学习之路——面试题
    #Java学习之路——第一部分总结
    #Java学习之路——基础阶段(第五篇)
  • 原文地址:https://www.cnblogs.com/william7neral/p/4186221.html
Copyright © 2020-2023  润新知