📄 xoad.js
字号:
var XOAD_ERROR_USER = 0x400;var XOAD_ERROR_TIMEOUT = 0x401;var xoad = {};xoad.errorHandler = null;xoad.callbacks = {};xoad.callbacks.table = {};xoad.callbacks.count = 0;xoad.events = {};xoad.events.table = [];xoad.events.postTable = [];xoad.events.timeout = 5000;xoad.events.startInterval = 250;xoad.events.refreshInterval = 2000;xoad.events.status = 0;xoad.observers = [];xoad.asyncCall = function() {};xoad.callSuspender = function(){ return { suspend : function() { this.suspended = true; }, suspended : false }};xoad.getError = function(errorCode, errorMessage){ return { code : errorCode, message : errorMessage }};xoad.getXmlHttp = function(){ var xmlHttp = null; try { xmlHttp = new XMLHttpRequest(); } catch (e) { var progIds = ['MSXML2.XMLHTTP', 'Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0']; var success = false; for (var iterator = 0; (iterator < progIds.length) && ( ! success); iterator ++) { try { xmlHttp = new ActiveXObject(progIds[iterator]); success = true; } catch (e) {} } if ( ! success ) { return null; } } return xmlHttp;};xoad.clone = function(target, source){ var wipeKeys = []; var key = null; for (key in target.__meta) { if (typeof(source[key]) == 'undefined') { wipeKeys[wipeKeys.length] = key; } } if (wipeKeys.length > 0) { for (var iterator = 0; iterator < wipeKeys.length; iterator ++) { target[wipeKeys[iterator]] = null; } } for (key in source.__meta) { if (source[key] == null) { target[key] = null; } else { target[key] = source[key]; } } target.__meta = source.__meta; target.__size = source.__size; target.__timeout = source.__timeout;};xoad.serialize = function(data){ if (data == null) { return 'N;'; } var type = typeof(data); var code = ''; var iterator = 0; var length = null; var asciiCode = null; var key = null; if (type == 'boolean') { code += 'b:' + (data ? 1 : 0) + ';'; } else if (type == 'number') { if (Math.round(data) == data) { code += 'i:' + data + ';'; } else { code += 'd:' + data + ';'; } } else if (type == 'string') { length = data.length; for (iterator = 0; iterator < data.length; iterator ++) { asciiCode = data.charCodeAt(iterator); if ((asciiCode >= 0x00000080) && (asciiCode <= 0x000007FF)) { length += 1; } else if ((asciiCode >= 0x00000800) && (asciiCode <= 0x0000FFFF)) { length += 2; } else if ((asciiCode >= 0x00010000) && (asciiCode <= 0x001FFFFF)) { length += 3; } else if ((asciiCode >= 0x00200000) && (asciiCode <= 0x03FFFFFF)) { length += 4; } else if ((asciiCode >= 0x04000000) && (asciiCode <= 0x7FFFFFFF)) { length += 5; } } code += 's:' + length + ':"' + data + '";'; } else if (type == 'object') { if (typeof(data.__class) == 'undefined') { length = 0; if ( (typeof(data.length) == 'number') && (data.length > 0) && (typeof(data[0]) != 'undefined')) { for (iterator = 0; iterator < data.length; iterator ++) { if (typeof(data[iterator]) != 'function') { code += xoad.serialize(iterator); code += xoad.serialize(data[iterator]); length ++; } } } else { for (key in data) { if (typeof(data[key]) != 'function') { if (/^[0-9]+$/.test(key)) { code += xoad.serialize(parseInt(key)); } else { code += xoad.serialize(key); } code += xoad.serialize(data[key]); length ++; } } } code = 'a:' + length + ':{' + code + '}'; } else { code += 'O:' + data.__class.length + ':"' + data.__class + '":' + data.__size + ':{'; if (data.__meta != null) { for (key in data.__meta) { if (typeof(data[key]) != 'function') { code += xoad.serialize(key); code += xoad.serialize(data[key]); } } } code += '}'; } } else { code = 'N;' } return code;};xoad.setErrorHandler = function(handler){ if ( (handler != null) && (typeof(handler) == 'function')) { xoad.errorHandler = handler; return true; } return false;};xoad.restoreErrorHandler = function(){ xoad.errorHandler = null; return true;};xoad.throwException = function(error, throwArguments){ if (typeof(throwArguments) != 'undefined') { var sender = throwArguments[0]; var method = throwArguments[1]; method = 'on' + method.charAt(0).toUpperCase() + method.substr(1) + 'Error'; if (xoad.invokeMethod(sender, method, [error])) { return false; } } if ( (xoad.errorHandler != null) && (typeof(xoad.errorHandler) == 'function')) { xoad.errorHandler(error); return false; } throw error;};xoad.invokeMethod = function(obj, method, invokeArguments){ if ( (obj == null) || (typeof(obj) != 'object')) { return false; } var type = eval('typeof(obj.' + method + ')'); if (type == 'function') { var invokeCode = 'obj.' + method + '('; if (typeof(invokeArguments) != 'undefined') { for (var iterator = 0; iterator < invokeArguments.length; iterator ++) { invokeCode += 'invokeArguments[' + iterator + ']'; if (iterator < invokeArguments.length - 1) { invokeCode += ', '; } } } invokeCode += ')'; return eval(invokeCode); } return false;};xoad.call = function(obj, method, callArguments){ if ( (obj == null) || (typeof(obj) != 'object') || (typeof(obj.__class) != 'string')) { return false; } var methodCallback = null; var methodArgs = []; for (var iterator = 0; iterator < callArguments.length; iterator ++) { if ( (typeof(callArguments[iterator]) == 'function') && (iterator == callArguments.length - 1)) { methodCallback = callArguments[iterator]; continue; } methodArgs[methodArgs.length] = callArguments[iterator]; } var xmlHttp = xoad.getXmlHttp(); var requestBody = { source : obj, className : obj.__class, method : method, arguments : methodArgs }; xoad.notifyObservers('call', requestBody); requestBody.source = xoad.serialize(requestBody.source); requestBody.arguments = xoad.serialize(requestBody.arguments); requestBody = xoad.serialize(requestBody); var url = obj.__url; if (url.indexOf('?') < 0) { url += '?'; } else { url += '&'; } url += 'xoadCall=true'; if (methodCallback != null) { xmlHttp.open('POST', url, true); } else { xmlHttp.open('POST', url, false); } var callId = null; var callTimeout = obj.getTimeout(); if (callTimeout != null) { callId = xoad.callbacks.count; } xoad.callbacks.count ++; var callResult = true; var requestCompleted = function() { if (typeof(callResult) == 'object') { if (callResult.suspended) { return false; } } if (callId != null) { if (eval('xoad.callbacks.table.call' + callId + '.timeout')) { return false; } eval('window.clearTimeout(xoad.callbacks.table.call' + callId + '.id)'); eval('xoad.callbacks.table.call' + callId + ' = null'); } if (xmlHttp.status != 200) { return xoad.throwException(xoad.getError(xmlHttp.status, xmlHttp.statusText), [obj, method]); } else { if (xmlHttp.responseText == null) { return xoad.throwException(xoad.getError(xmlHttp.status, 'Empty response.'), [obj, method]); } if (xmlHttp.responseText.length < 1) { return xoad.throwException(xoad.getError(xmlHttp.status, 'Empty response.'), [obj, method]); } try { eval('var xoadResponse = ' + xmlHttp.responseText + ';'); } catch(e) { return xoad.throwException(xoad.getError(xmlHttp.status, 'Invalid response.'), [obj, method]); } if (typeof(xoadResponse.exception) != 'undefined') { return xoad.throwException(xoad.getError(XOAD_ERROR_USER, xoadResponse.exception), [obj, method]); } if (xoad.notifyObservers('callCompleted', xoadResponse)) { obj.__clone(xoadResponse.returnObject); if (typeof(xoadResponse.output) != 'undefined') { obj.__output = xoadResponse.output; } else { obj.__output = null; } return { returnValue : xoadResponse.returnValue }; } } return false; };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -