精通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;

	}

}

你可能感兴趣的:(Ajax)