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

📄 ajaxrequest.js

📁 asp的bbs程序
💻 JS
字号:
var AjaxRequest = {FormIndex:0};
// index:
//   1: 0,1,2,...,n
//   2: 'first'|'last'
AjaxRequest.SetFormIndex = function (index /* :Number|String */) {
    if (typeof index == 'number') {
        this.FormIndex = index;
    }
    else if (index == 'last') {
        this.FormIndex = document.forms.length - 1;
    }
};
AjaxRequest.Callback = function (content, url, callback, ButtonName) {
    //alert(content + ' ' + callback);

    // 格式:[success|error|alert|url]value{GUID}ID|CONTENT{GUID}ID|CONTENT{GUID}ID|CONTENT
    // 对[success]更新为:
    //     [success]操作成功[returnurl]helloworld|/index.aspx[returnurl]helloworld|/index.aspx{GUID}ID|CONTENT{GUID}ID|CONTENT{GUID}ID|CONTENT
    //                      |--------------------->   新增部分   <---------------------------|

    var arr;
    var op_state = '', op_content = '', defaultRedirect = {index:-1,url:'',time:0};
    if (/^\[(success|error|alert|url)\][\s\S]+?\[returnurl(?:=\d+)?\][\s\S]+?/i.test(content)) {
        arr = /\[(success|error|alert|url)\]([\s\S]+?)\[returnurl(?:=\d+)?\]([\s\S]+?)\{.{8}\-.{4}\-.{4}\-.{4}\-.{12}\}/.exec(content);
        if (!arr) arr = /\[(success|error|alert|url)\]([\s\S]+?)\[returnurl(?:=\d+)?\]([\s\S]+)/.exec(content);
        op_state = arr[1];//'success';

        var index;
        var returnurl = content.match(/\[returnurl(?:=\d+)?\]/gi);
        for (var i = 0, len = returnurl.length; i < len; i++) {
            var item = /\[returnurl=(\d+)\]/i.exec(returnurl[i]);
            if (item) {
                defaultRedirect = {index:i,url:'',time:item[1]};
                break;
            }
        }

        var _arr = arr[3].split(/\[returnurl(?:=\d+)?\]/i);
        for (var i = 0, len = _arr.length; i < len; i++) {
            var item = _arr[i].split('|');
            op_content += ('<a href="' + item[1] + '"');
            if(item[1].indexOf('javascript:') != 0)
                op_content += (' onclick="Url.Reload(this.href);return false;"');
            op_content += ('>' + item[0] + '</a><br />');
            if (i == defaultRedirect.index) defaultRedirect.url = item[1];
        }
        op_content = arr[2] + '<p>' + op_content + '</p>';

        Widget.InfoCloseAble = false;
        //DomEvent.events = {};
        DomEvent.EventExecuteAble = false;
        DomEvent.EventExecuteFunc = function () {
            Url.Reload(_arr[0].split('|')[1]);
        }
    }
    else {
        if (/\{.{8}\-.{4}\-.{4}\-.{4}\-.{12}\}/.test(content)) {
            arr = /^\[(success|error|alert|url)\]([\s\S]+?)\{.{8}\-.{4}\-.{4}\-.{4}\-.{12}\}/i.exec(content);
            var len = 0;
            if (arr) {
                op_state = arr[1];
                op_content = arr[2];
                len = op_state.length + 2 + op_content.length;
            }
            content = content.substr(len);
        }
        else {
            arr = /^\[(success|error|alert|url)\]([\s\S]*)/i.exec(content);
            if (arr) {
                op_state = arr[1];
                op_content = arr[2];
            }
            content = '';
        }
    }

    if (op_state == 'url') {
        Url.Reload(op_content);
        return;
    }

    // 隐藏Loading框
    Widget.HideLoading();

    content = content == '' ? [] : content.split(content.substr(0, 38));
    for (var i = 0, len = content.length; i < len; i++) {
        if (content[i]) {
            var index = content[i].indexOf('|');
            var id = 'ajaxpanel_' + content[i].substr(0, index);
            var obj = $(id);
            if (!obj) continue;
            //if (!obj._lastupdate || !obj._lastupdate2 || obj._lastupdate2 > obj._lastupdate) {
                //obj._lastupdate = obj._lastupdate2 || 0;
                obj.innerHTML = content[i].substr(index + 1).replace(/\r|\n/g, '').replace(/ +/g, ' ');
            //}
        }
    }
    if (defaultRedirect.index > -1)
        setTimeout(function () {
            Url.Reload(defaultRedirect.url);
        }, defaultRedirect.time * 1000);

    callback ? callback(op_state, op_content, ButtonName) : Widget.Auto(op_state, op_content, ButtonName);
    
    // AjaxRequest.Render需要设置此回调方法,但此前并未设置,
    // 此处增加Ajax请求后调用,其他情况调用不会出问题
    Widget.Resize();
    
    if (content == '') return;

    //url && document.forms[this.FormIndex] && (document.forms[this.FormIndex].action = url);
    for (var i = 0, len = document.forms.length; i < len; i++) {
        url && (document.forms[i].action = url);
    }
};
// 渲染
AjaxRequest.Render = function (url, id/*id1, id2, ..., idn*/) {
    if (Widget.InfoNum) return;

    var ids = ToArray(arguments, 1);
    var callback = ids[ids.length - 1];
    if (typeof callback == 'function') ids = ids.slice(0, ids.length - 1);
    else callback = null;
    var _ids = ids.length > 0 ? ids.join(',') : '*';

    url = url || (document.forms[this.FormIndex] && document.forms[this.FormIndex].action) || this.ClearUrl(location.href);

    var ajax = new oAjax();
    ajax.url = url;
    ajax.content = '_AjaxPanelId=' + _ids;
    ajax.action = 'post';
    ajax.error = !true;
    ajax.callback = function (content) {
        setTimeout(function () {
        AjaxRequest.Callback(content, url, callback);
        //callback && callback();
        
        for (var i = 0, len = ids.length; i < len ; i++) {
            var obj = $('ajaxpanel_' + ids[i]);
            if (!obj) continue;
            var loading = $('ajaxloading_' + obj.loadingid);
            loading && (loading.style.display = 'none');
        }}, 0);
    };
    ajax.send();

    for (var i = 0, len = ids.length; i < len ; i++) {
        var obj = $('ajaxpanel_' + ids[i]);
        if (!obj) continue;
        if (!obj._lastupdate) obj._lastupdate = 0;
        obj._lastupdate2 = new Date().getTime();
    }
};
// ajax submit
AjaxRequest.IsSubmited = false;
AjaxRequest.Submit = function (ButtonName, id/*id1, id2, ..., idn*/) {
    if (Widget.InfoNum) return;
    if (this.IsSubmited) return;
    this.IsSubmited = true;

    var f = document.forms[this.FormIndex];
    if (!f) return;
    var ids = Array.prototype.slice.apply(arguments).slice(1);
    var callback = ids[ids.length - 1];
    if (typeof callback == 'function') ids = ids.slice(0, ids.length - 1);
    else callback = null;
    var _ids = ids.length > 0 ? ids.join(',') : '*';
    var list;
    if (this.FormIndex) {
        for (var i = 0; i < 2; i++) {
            var _list = this.GetFieldEnum(document.forms[i]);
            for (var item in _list) {
                if (!list)
                    list = _list;
                else
                    list[item] = _list[item];
            }
        }
    }
    else {
        list = this.GetFieldEnum(f);
    }
    if (ButtonName != '') {
        ButtonName = list['ButtonProxy'] = [ButtonName == '*' ? this.GetFirstSubmit(f) : ButtonName];
        ButtonName = ButtonName[0];
    }
    //alert(this.FormIndex + ' ' + Dumper(list));

    // 禁用按钮
    AjaxRequest.DisableButton(ButtonName, true);

    var query = '';
    for (var item in list) {
        for (var i = 0, len = list[item].length; i < len; i++) {
            //if (!item || !list[item][i]) continue;
            if (query != '') query += '&';
            query += item + '=' + escape(list[item][i]);
        }
    }

    var url = f.action || this.ClearUrl(location.href);

    var ajax = new oAjax();
    ajax.url = url;
    ajax.content = query + '&_AjaxPanelId=' + _ids;
    ajax.action = 'post';
    ajax.error = false;
    ajax.callback = function (content) {
        setTimeout(function () {
            AjaxRequest.Callback(content, url, callback, ButtonName);
            //callback && callback();
			AjaxRequest.IsSubmited = false;
        }, 0);
    };
    ajax.send();

    for (var i = 0, len = ids.length; i < len ; i++) {
        var obj = $('ajaxpanel_' + ids[i]);
        if (!obj) continue;
        if (!obj._lastupdate) obj._lastupdate = 0;
        obj._lastupdate2 = new Date().getTime();
    }
};
AjaxRequest.GetFieldEnum = function (f) {
    var list = {};
    for (var i = 0, len = f.elements.length; i < len; i++) {
        var item = f.elements[i];
        var name = item.name;
        if (item.disabled) continue;
        if (!list[name]) list[name] = [];
        switch (item.tagName.toLowerCase()) {
            case 'input':
                switch (item.type) {
                    case 'text':
                    case 'hidden':
                    case 'password':
                        list[name].push(item.value);
                    case 'radio':
                    case 'checkbox':
                        if (item.checked) list[name].push(item.value);
                        break;
                }
                break;
            case 'textarea':
                list[name].push(item.value);
                break;
            case 'select':
                list[name].push(item.options[item.selectedIndex].value);
                break;
        }
    }
    return list;
};
AjaxRequest.GetFirstSubmit = function (f) {
    var inputs = f.getElementsByTagName('input');
    for (var i = 0, len = inputs.length; i < len; i++) {
        if (inputs[i].type == 'submit' || inputs[i].type == 'image')
            return inputs[i].name;
    }
    return '';
};
// 设置按钮状态
AjaxRequest.DisableButton = function (ButtonName, disabled) {
    try {
        var but = ButtonName && $(ButtonName);
        if (!but) return;
        but.disabled = disabled;
        if (disabled) {
            but._onclick || (but._onclick = but.onclick);
            but._href || (but._href = but.href);
            but.onclick = function () {};
            but.href = 'javascript:void(0);';
        }
        else {
            but.onclick = but._onclick;
            but.href = but._href;
        }
    }
    catch (e) {}
};
AjaxRequest.ClearUrl = function (url /* :String */) {
    url = url.substring(0, url.indexOf('#')) || url;
    return url;
};

// 清除指定ajax_panel的内容
AjaxRequest.Clear = function () {
    for (var i = 0, len = arguments.length; i < len; i++) {
        var obj = $('ajaxpanel_' + arguments[i]);
        obj && (obj.innerHTML = '');
    }
};

// 普通提交方式
var Request = {FormIndex:0};
Request.Submit = function (ButtonName, Target) {
    var f = document.forms[this.FormIndex];
    if (!f) return;
    Target && (f.target = Target);
    if (!f.elements['ButtonProxy']) {
        var but = oNode.CreateInput('ButtonProxy');
        but.type = 'hidden';
        oNode.AddNode(but, f);
    }
    f.elements['ButtonProxy'].value = [ButtonName || AjaxRequest.GetFirstSubmit(f)];

    f.method = 'post';
    f.submit();
    this.FormIndex = 0;
};

⌨️ 快捷键说明

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