精通js里的完整ajax代码

if (typeof XMLHttpRequest == 'undefined') {
	XMLHttpRequest = function() {
		return new ActiveXObject(navigator.userAgent.indexOf('MSIE 5') > 0 ? 'Microsoft.XMLHTTP': 'Msxml2.XMLHTTP');
	}
};
/*一个完整的ajax函数*/
function ajax(options) {
	options = {
		type: options.type || 'POST',
		ulr: options.url || '',
		timeout: options.timeout || 5000,
		//设置超时
		onComplete: options.onComplete ||
		function() {},
		onError: options.onError ||
		function() {},
		onSuccess: options.onSuccess ||
		function() {},
		data: options.data || ''
	};
	var xml = new XMLHttpRequest();
	xml.open(options.type, options.url, true);
	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;
		}
	};
	xml.send();
	/*判断加载是否成功*/
	function httpSuccess(r) {
		try {
			return ! r.status && location.protocl == '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 = tpye == 'xml' || data ? r.responseXML: r.responseText;
		if (type == 'script') {
			eval.call(window, data);
		}
		return data;
	}
}

posted @ 2010-10-14 20:01  zjhsd2007  阅读(354)  评论(0编辑  收藏  举报