改写一下下面的两个函数
function n(e, n) {
// e 请求的方式 ;
// n 请求的地址
var i = new XMLHttpRequest;
return "withCredentials" in i ? i.open(e, n, !0) : "undefined" != typeof XDomainRequest ? (i =new XDomainRequest, i.open(e, n)) : i = null, i
}
function i(e, n, i, t) {
return void 0 != e && (void 0 == i && (i = e.sendFinishedCallback), void 0 == t && (t = e
.sendErrorCallback)), n.onreadystatechange = function() {
n.readyState === XMLHttpRequest.DONE && 200 === n.status ? i(n.responseText) : n.readyState ===
XMLHttpRequest.DONE && t(n.responseText)
}, n
}
把这两个函数改写的简单易懂,最好有注释。
回答
函数1:
// 这是一段兼容 IE 的发 Ajax 请求的函数 function request(method, url) { // e 请求的方式 ; // n 请求的地址 var xhr = new XMLHttpRequest(); if ("withCredentials" in xhr) { return xhr.open(method, url, true); } if ("undefined" != typeof XDomainRequest) { xhr = new XDomainRequest(); return xhr.open(method, url); } xhr = null; return xhr; }
/** * 这是处理异步请求响应的一个函数 * @param defaultHandlers 默认的处理函数 * @param xhr 请求对象 * @param finishCallback 成功的callback * @param errorCallback 异常的callback * @returns */ function hanldeXhrResponse( defaultHandlers, xhr, finishCallback, errorCallback ) { // 如果处理函数为空,则采用默认值 if (defaultHandlers != undefined) { if (finishCallback == undefined) { finishCallback = defaultHandlers.sendFinishedCallback; } if (errorCallback == undefined) { errorCallback = defaultHandlers.sendErrorCallback; } } // 监控请求的状态变化 xhr.onreadystatechange = function () { // 完成且成功 if (xhr.readyState === XMLHttpRequest.DONE && 200 === xhr.status) { finishCallback(xhr.responseText); } else { // 仅仅是完成 if (xhr.readyState === XMLHttpRequest.DONE) { errorCallback(xhr.responseText); } } }; return xhr; }