ajax


function getXMLHttpRequest() {
	var xmlhttp;
	if (window.XMLHttpRequest) {
		try {
			xmlhttp = new XMLHttpRequest();
			xmlhttp.overrideMimeType("text/html;charset=UTF-8");//设定以UTF-8编码识别数据
		} catch (e) {}
	} else if (window.ActiveXObject) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHttp");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Msxml3.XMLHttp");
				} catch (e) {}
			}
		}
	}
	return xmlhttp;
} 


function ajax(options){

	options = {
	
		type: options.type || "POST",
		url: options.url || "",
		timeout: options.timeout || 5000,
		onComplete: options.onComplete || function(){},
		onError: options.onError || function(){},
		onSuccess: options.onSuccess || function(){},
		data: options.data || ""
	};

	var xml = getXMLHttpRequest();
	xml.open(options.type,options.url,true);
	
	if('POST' == options.type){
		xml.setRequestHeader(
		"Content-Type", "application/x-www-form-urlencoded");

		if ( xml.overrideMimeType )
			xml.setRequestHeader("Connection", "close");
	}

	var timeoutLength = options.timeout;
	var requestDone = false;

	setTimeout(function(){
		requestDone = true;
	},timeoutLength);

	xml.onreadystatechange = function(){
		if(xml.readyState == 4 && !requestDone){
			if(httpSuccess(xml)){
				options.onSuccess(httpData(xml,options.type));
			}else{
				options.onError();
			}

			options.onComplete();
			xml = null;
		}
	};

	if('POST' == options.type)
		xml.send(serialize(options.data));
	else
		xml.send();

	function httpSuccess(r){
		try{
			return !r.status && location.protocol == "file:" || 
				(r.status >=200 && r.status < 300) ||
				r.status == 304 ||
				navigator.userAgent.indexOf("Safari") >=0 && typeof r.status == "undefined";
		}catch(e){}
		return false;
	}

	function httpData(r,type){
		var ct = r.getResponseHeader("content-type");
		var data = !type && ct && ct.indexOf("xml") >=0;
		data = type == "xml" || data ? r.responseXML : r.responseText;

		if(type == "script")
			eval.call(window,data);
		
		return data;
	}

	function serialize(a) {
		var s = [];
		
		if ( a.constructor == Array ) {
			for ( var i = 0; i < a.length; i++ )
				s.push( a[i].name + "=" + encodeURIComponent( a[i].value ) );
		} else {
			for ( var j in a )
				s.push( j + "=" + encodeURIComponent( a[j] ) );
		}
		return s.join("&");
	}

}




你可能感兴趣的:(JavaScript,Ajax,xml,Microsoft,Safari)