Actualización

This commit is contained in:
Xes
2025-04-10 12:36:07 +02:00
parent 1da7c3f3b9
commit 4aff98e77b
3147 changed files with 320647 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
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 );