?? ajaxrequest.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 + -