⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ajax.lib.js

📁 asp的bbs程序
💻 JS
字号:
/*
  By Hangring
  #2007.01.11#
  ---
  use list:
  > global.lib.js
  > browser.lib.js
  ---
  Ajax
*/

$Defined('Ajax');
var Ajax = {};

Ajax.Init = function (callback) {
    callback.req = null;
    // listener
    callback.listener = function () {
        if (callback.req.readyState == 4) {
            if (callback.req.status == 200) {
                // right
                try {
                    callback(Browser.IsIE && callback.encode == 'gb2312' ? Ajax.gb2utf8(callback.req.responseBody) : (callback.type == 'text' ? callback.req.responseText : callback.req.responseXML));
                }
                catch (e) {
                    callback.halt && callback.halt('[callback] ' + e.name + ':' + e.message);
                }
            }
            else {
                // error
                callback.halt && callback.halt('[callback error] ' + callback.req.status);
            }
        }
    }
    callback.init = function () {
        if (window.XMLHttpRequest) {
            callback.req = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            // isIE = true;
            try {
                callback.req = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    callback.req = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e) {
                    callback.req = false;
                }
            }
        }
        if (callback.req) {
            callback.req.onreadystatechange = function () {callback.listener()};
        }
    }
    callback.init();

    // send 
    // Description:
    // opt = {
    //    content : '',
    //    /* 以text|xml方式返回 */
    //    type : 'text'|'xml',
    //    /* 指定请求页面的编码,当前只实现gb2312到utf-8转换 */
    //    encode  : 'gb2312',
    //    asyn    : true|false,
    //    action  : 'post'|'get',
    //    error   : true|false
    // }
    //
    callback.send = function (url, opt) {
        opt = opt || {content:'',encode:'',asyn:true};
        opt.content = !!opt.content ? opt.content : '';
        opt.type = (opt.type == undefined || opt.type.toLowerCase() == 'text') ? 'text' : 'xml';
        opt.encode = opt.encode ? opt.encode.toLowerCase() : '';
        opt.asyn = opt.asyn == undefined ? true : !!opt.asyn;
        opt.action = (opt.action == undefined || opt.action.toLowerCase() == 'get') ? 'get' : 'post';
        opt.error = opt.error == undefined ? false : !!opt.error;

        callback.type = opt.type;
        callback.encode = opt.encode;
        callback.error = opt.error;

        try {
            callback.req.open(opt.action, url, opt.asyn);
        }
        catch (e) {
            callback.halt && callback.halt('[open] ' + e.name + ':' + e.message);
            return;
        }

        try {
            callback.req.setRequestHeader('Connection', 'close');
            this.req.setRequestHeader('Accept-Encoding', 'gzip, deflate');
            callback.req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded' + (opt.encode ? ';charset=' + opt.encode : ''));
            if(callback.req.overrideMimeType && opt.encode) {
                callback.req.overrideMimeType('text/xml' + (opt.encode ? ';charset=' + opt.encode : ''));
            }
            callback.req.send(opt.content);
        }
        catch (e) {
            callback.halt('[open] ' + e.name + ':' + e.message + '\n** 检查是否为跨域访问。');
        }
    };

    // abort
    callback.abort = function () {
        callback.req.abort();
    };

    // 中断,并提示错误信息
    callback.halt = function (description) {
        callback.error && alert(description);
    }
}

// gb2312 to utf8
Ajax.gb2utf8 = function (data) {
    var glbEncode = [];
    gb2utf8_data = data;
    execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
    var t = escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
    t = t.split("@");
    var i=0, j = t.length, k;
    while(++i < j) {
        k = t[i].substring(0,4);
        if(!glbEncode[k]) {
            gb2utf8_char = eval("0x" + k);
            execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
            glbEncode[k] = escape(gb2utf8_char).substring(1, 6);
        }
        t[i] = glbEncode[k] + t[i].substring(4);
    }
    gb2utf8_data = gb2utf8_char = null;
    return unescape(t.join("%"));
}

/*
    只能请求同域下的页面,否则会出现跨域问题
    ---
    Ajax.Init(_callback);
    // (1)
    _callback.send(url, {content:'', encode:'gb2312', action:'get', asyn:true, error:false});
    // (2) Or 
    _callback.init();
    _callback.send(url, {content:'', encode:'gb2312', action:'get', asyn:true, error:false});

    // call back
    function _callback (content) {
        // ...
    }
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -