这三个参数,怎么用呢?规则到底是什么,糊涂了。。
accepts,contents,converters
求答。
什么情况下,才执行 convers 里的方法呢?
最好举个 例子。。例子。。例子。。。
jQuery.ajaxSetup({
accepts: {
script: "text/javascript, application/javascript"
},
contents: {
script: /javascript/
},
converters: {
"text script": jQuery.globalEval
}
});
补充:
一篇相关的源码解析文章,敬上:http://www.cnblogs.com/chuaWe...
希望大神再帮我梳理梳理。。
//补充 发现在如何选择相应的converts函数时有些复杂,没分析。。
这三个参数的原理是:jquery 里面预先 设置了这三个参数,用户的设置也会合并覆盖进去。
accepts 是设置发送头里的类型,与另外两个没关系。
dataType 设置了就直接用来 在converts里比较并执行相应的converts 函数,
dataType没设置就 那就在contents里匹配,匹配后再在converts 里比较,执行相应的converts 函数。
coverts函数才将结果返回给 success fail complete 等函数。
题主所说的这几个我没有用过,所以也不清楚具体作用,贴一下API地址吧:
http://api.jquery.com/jQuery....
---------------------------- 更新
看了一些文章:
https://decadecity.net/blog/2...
https://github.com/jquery/jqu...
这两篇文章和题主说的情况还是很接近的。写了一个case是相关用法的demo:
https://jsfiddle.net/weisiwu/...
但是在这个demo中我也贴了几个问题:
---------------------------- 更新
看完源码后,大概了解了它的流程,但是jquery为什么这么做,我概括不出来。
我来说一下,它是怎么用的(个人的理解,欢迎讨论)。
首先在给出的例子中有三个属性:
accepts/contents/converters
第一个属性它的作用是用于和服务器进行内容协商(content negotiation),其实也就是建议服务器
按照请求中设置的头来返回数据类型。
第二个contents 属性,它的作用是在 dataType 被设置为 * 时其作用(经过测试,当不设置 dataType 时也会生效,应该是内部做了一些处理)
它的值一个键值对,如例子中给出的一样,jquery遍历它的属性,用属性值去检测响应头中的 content-type
如果符合条件的话(为 true),那么将该请求的值按照对应的种类进行解析。需要注意的是,如果设置了 dataType,
那么这个属性是无效的(从代码里面来看)。
第三个属性 converters 用于转化值,例如用户指定的 dataType 为 self,那么需要在该属性中定义一个处理函数
来处理这种类型。至于第一个为什么为 text,我也给绕昏了,不过看上去应该是因为jquery 从 XHR 中抽出来的类型
(大概有: text/xml/json)。
我使用以下代码,更改了一些设置来印证我的看法
举几个例子 来印证我的看法:
1 dataType 设置为 * ,在 contents 中使用错误的正则来检测,结果如下:
代码执行完毕后,控制台并没有输出信息。可以视作因为没有 content-type 不满足 contents 中的 script
的正则,所以没有指定类型为 script.故也没有成功调用 converters
2 dataType 设置 script, 在 contents 中使用错误的正则来检测
代码执行完毕,控制台输出信息,可以视作其直接跳过了 contents
3 dataType 设置 *, 在 contents 中使用正确的正则来检测
代码执行完毕后,控制台输出信息,可以视作其通过 contents 将类型确定为 script 并最后成功调用
对应的 converters.
先这样,其实源码还是有一些东西我也不是很理解。周末回去再看看