上一篇文章,講解了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對象中的所有key for ( key in src ) { // 如果值不是undefined if ( 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 ); } // 返回target return target;}