mimeToDataType(xhr.getResponseHeader('content-type'))
result = xhr.responseText
try {
// http://perfectionkills.com/global-eval-what-are-the-options/
if (dataType == 'script')(1, eval)(result) //如果返回的数据类型是JS
else if (dataType == 'xml') result = xhr.responseXML
else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
} catch (e) {
error = e
}
//如果解析出错,则执行全局parsererror事件
if (error) ajaxError(error, 'parsererror', xhr, settings)
//否则执行ajaxSuccess
else ajaxSuccess(result, xhr, settings)
} else {
//如果请求出错,则根据xhr.status来执行相应的错误处理函数
ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings)
}
}
}
var async = 'async' in settings ? settings.async : true
xhr.open(settings.type, settings.url, async)
//设置请求头信息
for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name])
//如果ajaxBeforeSend函数返回的false,则取消此次请示
if (ajaxBeforeSend(xhr, settings) === false) {
xhr.abort()
return false
}
//当设置了settings.timeout,则在超时后取消请求,并执行timeout事件处理函数
if (settings.timeout > 0) abortTimeout = setTimeout(function() {
xhr.onreadystatechange = empty
xhr.abort()
ajaxError(null, 'timeout', xhr, settings)
}, settings.timeout)
// avoid sending empty string (#319)
xhr.send(settings.data ? settings.data : null)
return xhr
}
// handle optional data/success arguments
//将参数转换成ajax函数指定的参数格式
function parseArguments(url, data, success, dataType) {
var hasData = !$.isFunction(data) //如果data是function,则认为它是请求成功后的回调
return {
url: url,
data: hasData ? data : undefined, //如果data不是function实例
success: !hasData ? data : $.isFunction(success) ? success : undefined,
dataType: hasData ? dataType
关键词:zepto是啥