• 个人写的一个javascript 框架


       前几天公司要写一个calendar 的程序,因为要求ajax提交的时候,这个js的大小要很小(不能超过3K),而且要处理ajax的并发性问题,这样我就必须要写一个自己的ajax程序。刚好这个任务下来是周五,我就利用周末的时间写了一个简单的javascrpit的框架,包括以下的内容:
    1. 内核,处理类,类的继承,一些简单的常用的函数。
    2. Ajax处理,处理了并发提交时候的互相替换问题。
    3. Event处理,简单的事件监听函数。
    4. Calendar 一个简单的日历,允许在日历上添加事件。
    5. Json 数据的json的处理。
    等我有空,我会整理一个文档出来。现在我只是把源代码发布出来,有任何建议,请给我来信niwzw@163.com
    NanJia 是我公司的名字,在这里仅仅是做为命名空间,以防止和其他的类库冲突。

    源代码下载
    ajax部分我给它提取成了一个独立的文件,下面的它的代码,它的核心是用了一个对象池技术。
    NanJia = {};
    NanJia.ObjPool 
    = function() 
    {
        
    this.Pool = [];
        
    this.Args = [];
    }
    NanJia$ObjPool 
    = NanJia.ObjPool.prototype;
    NanJia$ObjPool.GetInstance 
    = function (createH, compareH, args) 
    {
        
    for (var i = 0; i < this.Pool.length; i++
        {
            
    if (this.Compare(this.Pool[i], compareH)) 
            {
                
    this.Args[i] = args;
                
    return this.Pool[i];
            }
        }
        
    var argu = Array.prototype.slice.call(arguments, 3);
        
    this.Pool[this.Pool.length] = createH.apply(this, argu);
        
    this.Args[this.Pool.length-1= args;
        
    return this.Pool[this.Pool.length - 1];
    }
    NanJia$ObjPool.Compare 
    = function(obj, handle) 
    {
        
    return handle.call(this, obj);
    }
    NanJia$ObjPool.GetInfo 
    = function(obj) 
    {
        
    for (var i = 0; i < this.Pool.length; i++
        {
            
    if (this.Pool[i] === obj)
            {
                
    break;
            }
        }
        
    if (i == this.Pool.length)
        {
            
    return [];
        } 
        
    else 
        {
            
    return this.Args[i];
        }
    }
    NanJia.XMLHttp 
    = function(){
        
    this.Response = null;
    }
    NanJia.XMLHttp.ObjPool 
    = new NanJia.ObjPool();
    NanJia$XMLHttp 
    = NanJia.XMLHttp.prototype;
    NanJia.XMLHttp.Create 
    = function()
    {
        
    if (window.ActiveXObject)
        {
            
    var MSXML = ['MSXML2.XMLHTTP.6.0''MSXML2.XMLHTTP.5.0''MSXML2.XMLHTTP.4.0''MSXML2.XMLHTTP.3.0''MSXML2.XMLHTTP''Microsoft.XMLHTTP'];
            
    var e;
            
    for(var n = 0; n < MSXML.length; n ++)
            {
                
    try {
                    
    var objXMLHttp = new ActiveXObject(MSXML[n]);
                    
    break;
                } 
                
    catch(e)
                {
                    
    //NanJia.Alert(e);
                }
            }
        } 
    else {
            
    var objXMLHttp = new XMLHttpRequest();
        }
        
    return objXMLHttp;
    }
    NanJia$XMLHttp.Request 
    = function (url, data, method, callBack)
    {
        
    var argu = Array.prototype.slice.call(arguments, 4);
        
    var objXMLHttp = NanJia.XMLHttp.ObjPool.GetInstance(NanJia.XMLHttp.Create, NanJia.XMLHttp.Compare, argu);
        
    var e;
        
    try {
            
    if (url.indexOf("?"> 0){
                url 
    += "&randnum=" + Math.random();
            } 
    else {
                url 
    += "?randnum=" + Math.random();
            }
            objXMLHttp.onreadystatechange 
    = function () {
                callBack.call(
    this, objXMLHttp);
            }
            objXMLHttp.open(method, url, 
    true);
            objXMLHttp.setRequestHeader(
    'Content-Type''application/x-www-form-urlencoded;charset=UTF-8');
            objXMLHttp.send(data);
        } 
    catch(e) {
            NanJia.Alert(e);
        }
    }
    NanJia.XMLHttp.Compare 
    = function(objXMLHttp) 
    {
        
    return (objXMLHttp.readyState == 4|| (objXMLHttp.readyState == 0);
    }
    NanJia$XMLHttp.Update 
    = function(url, id, method, param) 
    {
          
    if (method == null || method == 'undefind'
          {
              method 
    = "post";
          }
          
    this.Request(url, param, method, this.DivUpdate, id);
    }
    NanJia$XMLHttp.DivUpdate 
    = function (obj, id) 
    {
        
    if (objXMLHttp.readyState == 4)
        {
            NanJia.$(id).innerHTML 
    = this.EvalScripts(obj.responseText);
        }
    }
    NanJia.$ 
    = function(id) 
    {
        
    return document.getElementById(id);
    }
    NanJia.$S 
    = function(id) 
    {
        
    return NanJia.$(id).options[NanJia.$(id).selectedIndex].value;
    }
    NanJia.EvalScripts 
    = function(str) 
    {
        
    var ScriptFragment = '<script[^>]*>([\\S\\s]*?)<\/script>';
        
    var matchAll = new RegExp(ScriptFragment, 'img');
        
    var matchOne = new RegExp(ScriptFragment, 'im');
        
    var str1 = str.match(matchAll);
        
    var re = "", i, v;
        
    if (str1 == null) {
            
    return (str);
        }
        
    for (i = 0; i < str1.length; i++) {
            v 
    = str1[i];
            re 
    += v.match(matchOne)[1]+"\n";
        }
        eval(re);
        
    return str.replace(matchAll, '');
    }
    NanJia$XMLHttp.toParam 
    = function(arr) {
        str 
    = "";
        
    for (key in arr)
        {
            
    if (typeof arr[key] == "string" || typeof arr[key] == "number")
            {
                str 
    += "&"+key+"="+arr[key];
            }
        }
        str 
    = str.replace(/^&/'');
        
    return str;
    }
    $String 
    = String.prototype;
    $String.trim 
    = function() {
        
    return this.replace(/^\s+|\s+$/g, '');
    }
  • 相关阅读:
    Mesos 配置项解析
    1039. Course List for Student (25)
    Cts框架解析(12)-ITargetPreparer
    通过ulimit改善linux系统性能(摘自IBM)
    HDU 1080 DP
    C语言调用Lua函数
    创建MySQL从库
    C# Func&lt;&gt;托付
    SpringMVC入门
    VNC连接Ubuntu 16.04桌面灰色的问题解决
  • 原文地址:https://www.cnblogs.com/niniwzw/p/1211806.html
Copyright © 2020-2023  润新知