📄 ajax.js
字号:
// -=( NEOTELOS.COM )=-
// AJAx Framework v1.0
// (Dev Build: 0132)
// by Shawn Khameneh
// (C) 2008 NEOTELOS.COM
//
// This script is not be used in any form
// without written permission of the original
// author.
//
ajaxWrapper.prototype.encodeString = encodeString;
ajaxWrapper.prototype.decodeString = decodeString;
function ajaxWrapper() {
var xmlhttp=null,
lastSend=null,
sendImportant=false,
URL=null,
multipart=false,
onComplete=null,
onFail=null,
onError=null,
onCreate=null,
onGet=null,
onPost=null,
onPingGet=null,
onPingPost=null,
onStateChange=null,
onSessionTimeout=null,
onPerform=null,
onCompleted=null,
postExtension='',
self='',
queueActive=false,
objectType = null;
this.setOnComplete=function(string) { onComplete=string; }
this.setOnFail=function(string) { onFail=string; }
this.setOnError=function(string) { onError=string; }
this.setOnCreate=function(string) { onCreate=string; }
this.setOnGet=function(string) { onGet=string; }
this.setOnPost=function(string) { onPost=string; }
this.setOnPingGet=function(string) { onPingGet=string; }
this.setOnPingPost=function(string) { onPingPost=string; }
this.setOnStateChange=function(string) { onStateChange=string; }
this.setOnSessionTimeout=function(string) { onSessionTimeout=string; }
this.setOnPerform=function(string) { onPerform=string; }
this.setOnCompleted=function(string) { onCompleted=string; }
this.setPostExtension=function(string) { postExtension=string; }
var skey_x='', // Required for security by server
skey_s='', // Required for security by server
skey_t='', // Required for security by server
queue=[];
this.init = init;
this.attach = attach;
this.stringReturn = stringReturn;
this.returnFinish = returnFinish;
this.perform = perform;
this.performQueue = performQueue;
this.set = set;
this.createObject = createObject;
this.send = send;
this.get = get;
this.post = post;
this.pingGet = pingGet;
this.pingPost = pingPost;
this.idle = idle;
this.evalEvent = evalEvent;
this.finishPost = finishPost;
this.clearQueue = clearQueue;
this.clear = clear;
this.abort = abort;
this.reset = reset;
function init() {
createObject();
}
function abort() {
try {
xmlhttp.abort();
} catch(e) { }
}
function attach(string) {
self=string;
}
// AJAX State Change (Complete, Busy, Fail)
function stringReturn() {
evalEvent(onStateChange);
if(xmlhttp.readyState && xmlhttp.readyState==4) {
try {
if(xmlhttp.status && xmlhttp.status >= 400) {
returnFail();
} else {
queue.shift();
evalEvent(onComplete);
var stmnt;
stmnt = xmlhttp.responseText;
stmnt = stmnt.split('@');
if(!multipart)
abort();
for(var i=0;i<stmnt.length;i++) {
perform(stmnt[i]);
}
returnFinish();
}
evalEvent(onCompleted);
} catch(err) {
returnError();
}
}
}
function abort() {
try {
if(queue.length!=0)
xmlhttp.abort();
} catch(e) {}
}
function clear() {
clearQueue();
abort();
}
function reset() {
clearQueue();
createObject();
}
function returnFinish() {
sendImportant=false;
lastSend=null;
performQueue();
}
function returnFail() {
evalEvent(onFail);
abort();
createObject();
returnFinish();
}
function returnError() {
evalEvent(onError);
abort();
createObject();
returnFinish();
}
function clearQueue() {
queue=new Array();
}
// Perform string sent by server
function perform(string) {
var tmp;
evalEvent(onPerform);
var stmnt = new Array();
stmnt = string.split(',');
for(tmp=0;tmp<stmnt.length;tmp++)
stmnt[tmp] = decodeString(stmnt[tmp]);
if(stmnt.length==2) {
switch(stmnt[0]) {
case 'x': // Sessions/security
skey_x='x='+stmnt[1]; break;
case 'j': // Perform JS command(s)
tmp = eval(stmnt[1]); break;
case 'a': // Display alert message
setTimeout("alert(\""+stmnt[1]+"\")",0); break;
case 'w': // Write to document
document.body.innerHTML +=(stmnt[1]); break;
case 'r': // Remove Child by ID
var elm = document.getElementById(stmnt[1]);
elm.parentNode.removeChild(elm);
elm = null;
break;
case 's': // Sessions/security
skey_s='s='+stmnt[1]; break;
case 't': // Sessions/security
clearTimeout(t); skey_t=setTimeout("sessionTimeout()", stmnt[1]); break;
}
} else if(stmnt.length==3) {
switch(stmnt[0]) {
case 'h': // Set element's HTML
document.getElementById(stmnt[1]).innerHTML = stmnt[2]; break;
case 'a': // Append to element's HTML
document.getElementById(stmnt[1]).innerHTML = document.getElementById(stmnt[1]).innerHTML + stmnt[2]; break;
case 'd': // Invoke element's attributes
tmp = eval('document.getElementById("'+stmnt[1]+'").'+stmnt[2]); break;
case 'v': // Set global variable
tmp = eval(stmnt[1]+' = '+stmnt[2]+';'); break;
}
} else if(stmnt.length==4) {
switch(stmnt[0]) {
case 'a': // Append child element to another element
var elm = document.createElement(stmnt[2]);
elm.setAttribute('id',stmnt[1]);
document.getElementById(stmnt[3]).appendChild(elm);
break;
case 's': // Change element style by ID
tmp = eval('document.getElementById("'+stmnt[1]+'").style.'+stmnt[2]+'='+stmnt[3]+';');
break;
}
}
}
// Perform string sent by server, then continue processing queue
function performQueue() {
if(queue.length>0) {
var tmp = queue[0];
queueActive=true;
tmp = tmp.split(',');
var tmp1 = tmp[1];
(tmp[1]==null)?tmp[1]='(null,true)':tmp[1]=('(\''+tmp1.replace(/'/g, '\\\'')+'\',true)');
eval(self+'.'+tmp[0]+tmp[1]);
} else {
queueActive=false;
}
}
// AJAX Session Timeout
function sessionTimeout() {
evalEvent(onSessionTimeout);
x='';
s='';
}
// Set AJAX server URL
function set(url,parts) {
URL=url;
(parts==null||parts==false)?multipart=false:multipart=true;
}
// Create new AJAX object
function createObject() {
evalEvent(onCreate);
if(xmlhttp!=null) {
xmlhttp.onreadystatechange = null;
abort();
xmlhttp = null;
}
try {
xmlhttp = new XMLHttpRequest();
objectType = 1;
return;
} catch(e) { }
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
objectType = 2;
multipart=false;
return;
} catch(e) { }
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
objectType = 3;
multipart=false;
return;
} catch(e) {
alert('Error: Could not create AJAX Interface.');
}
}
// Send string through active AJAX connection
function send(string) {
if(xmlhttp.readyState==1) {
if(multipart)
xmlhttp.onreadystatechange=stringReturn;
try {
if(skey_s!='') {
xmlhttp.send(skey_s+'&'+string);
} else {
xmlhttp.send(string);
}
} catch(err) {
returnError();
}
if(!multipart)
xmlhttp.onreadystatechange = stringReturn;
} else {
returnError();
}
}
// Send string to server via GET
function get(string,q) {
evalEvent(onGet);
if(queueActive==false||q==null) {
if(string!=null) {
queue.push('get,'+string);
} else {
queue.push('get');
}
if(queueActive)
return;
queueActive==true;
}
if(string!='') string='&'+string;
if(multipart&&objectType==1) xmlhttp.multipart=true;
xmlhttp.open('GET',URL+'?'+skey_x+string,true);
if(multipart) {
xmlhttp.setRequestHeader("Content-type", "multipart/x-mixed-replace;boundary=\"rn9012\"");
}
send(null);
}
// Send string to server vis POST
function post(string,q) {
evalEvent(onPost);
if(queueActive==false||q==null) {
if(string!=null) {
queue.push('post,'+string);
} else {
queue.push('post');
}
if(queueActive)
return;
queueActive==true;
}
if(multipart&&objectType==1) xmlhttp.multipart=true;
xmlhttp.open('POST',URL+'?'+skey_x,true);
finishPost(string);
}
function finishPost(string) {
try {
if(multipart) {
xmlhttp.setRequestHeader("Content-type", "multipart/x-mixed-replace;boundary=\"rn9012\"");
}
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
} catch(e) {
returnFail();
}
var string2;
(postExtension!=null&&string!=null)?string2='&'+string:string2='';
postExtension?send(eval(postExtension)+string2):send(string2);
}
// Ping server via GET
function pingGet() {
evalEvent(onPingGet);
if(queueActive)
return;
//queue.push('pingGet');
queueActive==true;
if(multipart&&objectType==1) xmlhttp.multipart=true;
xmlhttp.open('GET',URL,true);
if(multipart) {
xmlhttp.setRequestHeader("Content-type", "multipart/x-mixed-replace;boundary=\"rn9012\"");
}
send(null);
}
// Ping server via POST
function pingPost() {
evalEvent(onPingPost);
if(queueActive)
return;
//queue.push('pingPost');
queueActive==true;
if(multipart&&objectType==1) xmlhttp.multipart=true;
xmlhttp.open('POST',URL,true);
finishPost();
}
// Return whether AJAX is idle
function idle() {
if(queue.length>0){ return false; }else{ return true; }
}
// Perform user-defined event action
function evalEvent(string) {
if(string!=null) return eval(string);
}
init();
}
// Encode string to send to server
function encodeString(text) {
text = text.replace(/_/g, "_0");
text = text.replace(/@/g, "_1");
text = text.replace(/,/g, "_2");
text = text.replace(/'/g, "_3");
text = text.replace(/ id="/gi, "_5");
text = text.replace(/ style="/gi, "_6");
text = text.replace(/ class="/gi, "_7");
text = text.replace(/ src="/gi, "_8");
text = text.replace(/<img/gi, "_9");
text = text.replace(/<a href="/gi, "_a");
text = text.replace(/<br>/gi, "_b");
text = text.replace(/<br \/>/gi, "_c");
text = text.replace(/<br\/>/gi, "_d");
text = text.replace(/<\/a>/gi, "_e");
text = text.replace(/<\/div>/gi, "_f");
text = text.replace(/<div/gi, "_g");
text = text.replace(/<b>/gi, "_h");
text = text.replace(/<\/b>/gi, "_i");
text = text.replace(/<i>/gi, "_j");
text = text.replace(/<\/i>/gi, "_k");
return encodeURI(text);
}
// Decode string from server
function decodeString(text) {
text = text.replace(/_k/g, "<\/i>");
text = text.replace(/_j/g, "<i>");
text = text.replace(/_i/g, "<\/b>");
text = text.replace(/_h/g, "<b>");
text = text.replace(/_g/g, "<div");
text = text.replace(/_f/g, "<\/div>");
text = text.replace(/_e/g, "<\/a>");
text = text.replace(/_d/g, "<br/>");
text = text.replace(/_c/g, "<br />");
text = text.replace(/_b/g, "<br>");
text = text.replace(/_a/g, "<a href=\"");
text = text.replace(/_9/g, "<img");
text = text.replace(/_8/g, " src=\"");
text = text.replace(/_7/g, " class=\"");
text = text.replace(/_6/g, " style=\"");
text = text.replace(/_5/g, " id=\"");
text = text.replace(/_3/g, "'");
text = text.replace(/_2/g, ",");
text = text.replace(/_1/g, "@");
text = text.replace(/_0/g, "_");
return text;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -