Welcome

首页 / 脚本样式 / jQuery / jQuery ajax:一些细节以及主函数扩展出来的方法

jQuery ajax:一些细节以及主函数扩展出来的方法2013-10-18 cnblogs Justany_WhiteSnow上一篇文章,讲解了jQuery.ajax函数。这篇文章将其他一些细节补充完。下一篇文章则开始讲解,jQuery是如何将script动态载入、XMLHttpRequest、JSONP一起包装进jQuery.ajax里的。

jQuery.ajaxSetup

我们可以从主函数看出,参数是通过jQuery.ajaxSetup产生的:

// 通过jQuery.ajaxSetup改造参数对象

s = jQuery.ajaxSetup( {}, options ),

那么jQuery.ajaxSetup在干些什么呢?

jQuery.ajaxSetup = function( target, settings ) {// 如果有参数return settings ?// 创建一个设置对象,先将jQuery.ajaxSettings的属性放进去,// 然后将参数也放进去ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :// 并将设置对象的属性放进jQuery.ajaxSettings对象里ajaxExtend( jQuery.ajaxSettings, target );};
ajaxExtend

ajaxExtend和jQuery.extend有一些不同,避免有些不需要深复制的属性进行深复制。

function ajaxExtend( target, src ) {var key, deep,flatOptions = jQuery.ajaxSettings.flatOptions || {};// 遍历src对象中的所有keyfor ( key in src ) {// 如果值不是undefinedif ( src[ key ] !== undefined ) {// 判断是不是不需要深复制的,如果不需要深复制,将属性直接写进target,// 否则写进deep里存起来// 我们可以从jQuery.ajaxSettings.flatOptions看到,// 实际上不需要深复制的是url和context( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];}}// 如果deep不是undefined,证明需要深复制if ( deep ) {// 开始深复制jQuery.extend( true, target, deep );}// 返回targetreturn target;}