var ajax = {};
ajax.x = function() {
if (typeof XMLHttpRequest !== 'undefined') {
return new XMLHttpRequest();
}
var versions = [
'MSXML2.XmlHttp.6.0',
'MSXML2.XmlHttp.5.0',
'MSXML2.XmlHttp.4.0',
'MSXML2.XmlHttp.3.0',
'MSXML2.XmlHttp.2.0',
'Microsoft.XmlHttp'
];
var xhr;
for (var i = 0; i < versions.length; i++) {
try {
xhr = new ActiveXObject(versions[i]);
break;
} catch (e) {}
}
return xhr;
};
ajax.send = function(params) {
var _async = params.async;
if (_async === undefined) {
_async = true;
}
var x = ajax.x();
x.open(params.method, params.url, _async);
x.onreadystatechange = function() {
if (x.readyState == 4) {
var status = x.status;
if (status >= 200 && status < 300) {
params.success && params.success(x.responseText, x.responseXML);
} else {
params.error && params.error(status);
}
}
};
if (params.method == 'POST') {
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
x.send(params.data);
};
ajax.get = function(params) {
var query = this.format_params(params.data);
params.method = 'GET';
params.data = null;
params.url = params.url + (query.length ? '?' + query : '');
ajax.send(params);
};
ajax.post = function(params) {
var query = this.format_params(params.data);
params.method = 'POST';
params.data = query.join('&');
ajax.send(params);
};
ajax.format_params = function(object) {
if (!object) {
return '';
}
if (typeof object === 'string') {
return encodeURI(object);
}
var pieces = [];
for (i in object) {
if (object.hasOwnProperty(i)) {
pieces.push(encodeURIComponent(i) + '=' + encodeURIComponent(object[i]));
}
}
pieces.push('_t=' + +new Date());
return pieces.join('&');
};
ajax.jsonp = function(params) {
//创建script标签并加入到页面中
var callbackName = ('jsonp_' + Math.random()).replace('.', '');
var head = document.getElementsByTagName('head')[0];
if (!params.data) {
params.data = {};
}
// 设置传递给后台的回调参数名
params.data['callback'] = callbackName;
var data = ajax.format_params(params.data);
var script = document.createElement('script');
head.appendChild(script);
//创建jsonp回调函数
window[callbackName] = function(json) {
head.removeChild(script);
clearTimeout(script.timer);
window[callbackName] = null;
params.success && params.success(json);
};
//发送请求
script.src = params.url + '?' + data;
//超时处理
if (params.time) {
script.timer = setTimeout(function() {
window[callbackName] = null;
head.removeChild(script);
params.error &&
params.error({
message: '超时'
});
}, params.time);
}
};