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

📄 ajax.js

📁 Simple AJAX Framework/Library. Contains numerous built-in functions, alongside speed enhancements b
💻 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 + -