//本来想写个ajax的封装的,但在情封的项目中无意看到这段源码,和我刚开始的构思差不多,果断copy过来参考,做了一点修改。 var Ajax = { createXHR:function () { if (typeof XMLHttpRequest !== 'undefined') { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== 'undefined') { if (typeof arguments.callee.activeXString !== 'string') { var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp']; for (var i = 0, len = versions.length; i < len; i++) { try { var xhr = new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; return xhr; } catch (ex) { } } } return new ActiveXObject(arguments.callee.activeXString); } else { throw new Error('No xhr object available'); } }, responseType:function (request) { var _responseType = request.getResponseHeader('Content-Type'); switch (_responseType) { case 'text/xml': return request.responseXML; case 'text/json': case 'text/javascript': case 'application/javascript': case 'application/x-javascript': return eval('(' + request.responseText + ')'); default: return request.responseText; } }, encodeFormData:function (data) { var _pairs = []; var _regexp = /%20/g; for (var name in data) { var _value = data[name].toString(); var _pair = encodeURIComponent(name).replace(_regexp, '+') + '=' + encodeURIComponent(_value).replace(_regexp, '+'); _pairs.push(_pair); } return _pair.join('&'); }, /** * 执行ajax请求 * @param {String} method 'GET' || 'POST' * @param {String} url * @param {Boolean} asyn 是否异步加载 * @param {Object} callback {success,failure} 回调对象,存放函数 * @param value */ ajaxRequest:function (method, url, asyn, callback, value) { var _xhr = this.createXHR(); _xhr.onreadystatechange = function () { if (_xhr.readyState === 4) { if (_xhr.status >= 200 && _xhr.status < 300 || _xhr.status === 300) { callback.success(this.responseType(_xhr)); } else { if (callback.failure) { callback.failure(_xhr.status, _xhr.statusText); } } } }; _xhr.open(method, url, asyn); if (method === 'GET') { _xhr.send(null); } else if (method === 'POST') { _xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); _xhr.send(this.encodeFormData(value)); } } };