今回は、Ajax関連の処理を取り扱う部分の解説になります。
IEメモリリーク対策
2368行目から2370行目は、Internet Explorerのメモリリーク対策のための処理です。window.unloadイベント発生時に、イベントを一括解除します。既に存在するunloadイベントを解除してしまわないようにwindowオブジェクトは含めません。
jQuery.fn.load()
2371行目からは、外部からHTMLの断片を読み込み表示するload()メソッドの定義部分になります。
2372行目にあるように引数として、url、外部サーバに渡すparams、そしてコールバック関数callbackが渡されてきます。次に2373行目ですが、もし引数urlが関数オブジェクトであれば、現在要素のonloadイベントに割り当てます。これは、load(fucntion(){..})の書式で、このイベント定義もここで行っていることが分かります。
2376行目から2380行目は、urlの後にセレクタ式が続く場合の処理で、この場合はスペースまでをurl変数、スペース以降をselector変数に格納します。
2382行目、callback変数が定義されていなければ、何もしないダミー関数を設定します。
外部サーバに対するリクエストメソッドのデフォルトは、2385行目にあるように"GET"です。
2388行目以降は、第2引数paramsが設定されていて、それが関数であればcallback関数に割り当てます。そうでなければ、2836行目で定義されているjQuery.param()メソッドを使ってクエリーパラメータを組み立てます。また、リクエストメソッドを"POST"に設定します。
2401行目は、self変数に自身を設定しています。
2404行目からは、jQuery.ajax()メソッドを使って、実際のリクエストを行う部分になります。引数として、先ほど設定したurl,type,paramsを利用します。また2409行目以降で、Ajaxリクエストが完了した場合の処理を定義しています。2411行目、もしstatusが"success"もしくは"notmodified"ならば取得した結果を挿入します。ここで、取得した結果から絞り込みを行うためのselectorが指定されている場合は、ダミーの<div />要素を作成して一旦その中に挿入してからfilter()メソッドを適用します。ただし、Internet Explorerで発生する"Permission Denied"エラーを抑制するために予めscriptタグは除去しておきます。
最後に2426行目でcallback関数を呼び出して、戻り値として自身を返して終了です。
jQuery.fn.serialize()
2432行目からは、Formの値をシリアライズするjQuery.fn.serialize()メソッドの定義です。serializeArray()メソッドを呼び出して、その結果をjQuery.param()メソッドを使って、key=value形式に変換して返します。
jQuery.fn.serializeArray()
2435行目からは、jQuery.fn.serializeArray()の処理になります。先ほどのserialize()メソッドとの違いは、戻り値がJSON形式で返ってくる点です。内部処理はjQueryメソッドのチェーンになっています。
2436行目のmapメソッドで選択要素のnodeNameを調べ、formであればその要素を返し、そうでなければ自身を返します。
2440行目のfilterメソッドによって、name属性が設定されていて、disableではないものでかつ、checked属性があるか、select要素またはtextarea要素か、もしくはtypeがtext,hidden,passwordであるものを抽出します。
2445行目のmapメソッドで、value値を取り出します。そして、2447行目でその値がnullでなくて、Array型であればmapメソッドによってさらに内部の配列要素を取り出します。
最後に、2453行目のget()メソッドによってjQuery.makeArrayメソッドを使ってクリーンにした配列を返します。
AJAX関連のイベント割り当て
2458行目からは、Ajax関連イベントの割り当て処理になります。ajaxStart,ajaxStop,ajaxComplete..などのイベントを現在選択中の要素に割り当てます。ここで面白いのは、これらの関数はどこにも定義されていなくて、ライブラリの利用者が定義したものをそのまま実行する形になります。
jQuery.get()
2464行目は、ブラウザのキャッシュを回避するためのパラメータを生成して、jsc変数に格納しています。
2466行目からは、簡単にGETリクエストを行うことができるjQuery.get()メソッドの定義です。2469行目で、第2引数に関数が渡された場合は、dataが省略されているものとみなしてcallback変数およびdata変数の値を設定し直します。2474行目を見ると、jQuery.get()メソッドはjQuery.ajax()の単なるラッパであることが分かります。実際のリクエストはjQuery.ajax()によって行われます。
jQuery.getScript()
2483行目は、外部からJavaScriptファイルを読み込むjQuery.getScript()メソッドの定義になります。こちらは、jQuery.get()の第4引数typeが"script"になっただけで処理内容は同じです。
jQuery.getJSON()
2487行目は、外部からJSON形式のデータを読み込むjQuery.getJSON()メソッドの定義になります。こちらも、jQuery.get()の第4引数typeが"json"になっただけで処理内容は同じです。
jQuery.post()
2491行目は、POSTメソッドを使って外部サーバからコンテンツを取得するjQuery.post()メソッドの定義になります。jquery.get()と同様にjQuery.ajax()メソッドのラッパになっています。違うのは、引数typeが"POST"になっていることで、それ以外の処理は共通になります。
jQuery.ajaxSetup()
2506行目からは、jQuery.ajaxSetup()メソッドの定義です。jQuery.ajax()メソッドを呼び出す際のデフォルト値を設定するためのものです。2507行目のjQuery.extend()メソッドを利用して、次に出てくるajaxSettingsの値を引数settingsで上書きします。
jQuery.ajaxSettings
2510行目からは、jQuery.ajaxSettingsの定義になります。jQuery.ajax()メソッドによって利用される各種設定のデフォルト値を定義しています。
global | ajaxStartやajaxStopといったグローバルイベントを実行するかどうかのフラグでデフォルトはtrue |
type | リクエストメソッドの種類 |
timeout | 名前のとおり、リクエストのタイムアウト値 |
contentType | サーバにデータを送る際のcontent-typeの種類で、デフォルトは"application/x-www-form-urlencoded"。これを変更することはあまりないでしょう |
processData | dataに文字列以外のオブジェクトが渡されてきた場合に、クエリー文字列形式に変換するかどうかのフラグ。デフォルト値はtrueで、DOMなどのデータを送信したい場合はこれをfalseにすると良いでしょう |
async | 非同期通信を行うかどうかのフラグで、falseにすると通信を行っている間の処理はブロックされる |
data | 相手のサーバに送信されるパラメータで、デフォルトはnull |
username | 認証が必要な場合に利用されるユーザID |
password | 認証が必要な場合に利用されるパスワード |
accepts | サーバに送信されるAcceptヘッダの種類 |