低階介面:jQuery.ajaxPrefilter()
- 詳細內容
- 分類:JQuery
- 發佈:2013-09-10, 週二 22:22
- 點擊數:2202
(PS:這篇文章是官網API文件的非專業翻譯+個人意見,並且重新排版過)
低階介面:jQuery.ajaxPrefilter()
處理客製化的Ajax選項,或是修改已存在的選項。會在每一個Ajax要求被傳送以及被 $.ajax()處理前。
語法:
jQuery.ajaxPrefilter( [dataTypes ], handler(options, originalOptions, jqXHR) ) //version added: 1.5
-
dataTypesType: String一個可選的字串,包含了一個或多個由空白鍵分開的資料型態。
-
handler(options, originalOptions, jqXHR)Type: Function()一個處理函式,用來設定往後的Ajax請求的預設值。
-
傳回值: undefined
一個使用$.ajaxPrefilter()註冊的前置過濾器經典範例看起來像是下面的例子:
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) { // Modify options, control originalOptions, store jqXHR, etc });
其中:
- options 是請求選項
- originalOptions 是提供給ajax方法的選項,未經修改,因此不包含ajaxSettings的預設值。(看不懂請參考:jQuery.ajaxPrefilter() 的參數options與originalOptions)
- jqXHR是請求的jqXHR物件
當客製化選項需要被處理時,前置過濾器是一個相當合適的選擇。用下面的程式碼來作為例子。如果客製化的abortOnRetry選項被設定為true時,每當呼叫$.ajax()時會自動放棄有相同URL的請求。
var currentRequests = {}; $.ajaxPrefilter(function( options, originalOptions, jqXHR ) { if ( options.abortOnRetry ) { if ( currentRequests[ options.url ] ) { currentRequests[ options.url ].abort(); } currentRequests[ options.url ] = jqXHR; } });
前置過濾器也可以用來修改已存在選項,例如,下面的代理服務器跨域請求透過 http://mydomain.net/proxy/:
$.ajaxPrefilter( function( options ) { if ( options.crossDomain ) { options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url ); options.crossDomain = false; } });
假如提供了可選的dataTypes參數,前置過濾器將只適用於指定資料型態的請求。例如,下面只適用於JSON與script資料型態請求的前置過濾器:
$.ajaxPrefilter( "json script", function( options, originalOptions, jqXHR ) { // Modify options, control originalOptions, store jqXHR, etc })
$.ajaxPrefilter() 也可以藉由傳回資料型態來將請求重新定向到另外一種資料型態,例如下面會設定一個請求為 "script",假如URL有相同的指定屬性定義在客製化的isActuallyScript函式中。
$.ajaxPrefilter(function( options ) { if ( isActuallyScript( options.url ) ) { return "script"; } });
這將能確認將請球視為“script”類型,而且也保證了所有附加到scrip資料型態的前置過濾器都能適用。
按個讚!~支持本站!~
FB推薦載入中