jQuery源码分析-15AJAX-类型转换器
<!--[if !supportLists]-->15.5 <!--[endif]-->AJAX中的类型转换器
前置过滤器、 请求分发器、类型转换器是读懂jQuery AJAX实现的关键,可能最难读的又是类型转换器。除此之外的源码虽然同样的让人纠结,但相较而言并不算复杂。
类型转换器将服务端响应的responseText或responseXML,转换为请求时指定的数据类型dataType,如果没有指定类型就依据响应头Content-Type自动猜测一个。在分析转换过程之前,很有必要先看看类型转换器的初始化过程,看看支持哪些类型之间的转换。
<!--[if !supportLists]-->15.5.1 <!--[endif]-->类型转换器的初始化
类型转换器ajaxConvert在服务端响应成功后,对定义在jQuery. ajaxSettings中的converters进行遍历,找到与数据类型相匹配的转换函数,并执行。我们先看看converters的初始化过程,对类型类型转换器的功能有个初步的认识。jQuery. ajaxSettings定义了所有AJAX请求的默认参数,我们暂时先忽略其他属性、方法的定义和实现:
jQuery.extend({
// some code ...
// ajax请求的默认参数
ajaxSettings: {
// some code ...
// List of data converters
// 1) key format is "source_type destination_type" (a single space in-between)
// 2) the catchall symbol "*" can be used for source_type
// 类型转换映射,key格式为单个空格分割的字符串:源格式 目标格式
converters: {
// Convert anything to text、
// 任意内容转换为字符串
// window.String 将会在min文件中被压缩为 a.String
"* text": window.String,
// Text to html (true = no transformation)
// 文本转换为HTML(true表示不需要转换,直接返回)
"text html": true,
// Evaluate text as a json expression
// 文本转换为JSON
"text json": jQuery.parseJSON,
// Parse text as xml
// 文本转换为XML
"text xml": jQuery.parseXML
}
}
// some code ...
});
然后在jQuery初始化过程中,对jQuery. ajaxSettings.converters做了扩展,增加了text>script的转换:
// Install script dataType
// 初始化script对应的数据类型
// MARK:AJAX模块初始化
jQuery.ajaxSetup({
accepts: {
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
},
contents: {
script: /javascript|ecmascript/
},
// 初始化类型转换器,这个为什么不写在jQuery.ajaxSettings中而要用扩展的方式添加呢?
// 这个转换器是用来出特殊处理JSONP请求的,显然,jQuery的作者John Resig,时时刻刻都认为JSONP和跨域要特殊处理!
converters: {
"text script": function( text ) {
&nb
- 发表评论
-
- 最新评论 更多>>