低階介面:jQuery.ajaxPrefilter()

(PS:這篇文章是官網API文件的非專業翻譯+個人意見,並且重新排版過)

低階介面:jQuery.ajaxPrefilter()

處理客製化的Ajax選項,或是修改已存在的選項。會在每一個Ajax要求被傳送以及被 $.ajax()處理前。

語法:

	jQuery.ajaxPrefilter( [dataTypes ], handler(options, originalOptions, jqXHR) )   
        //version added: 1.5
  • dataTypes
    Type: String
    一個可選的字串,包含了一個或多個由空白鍵分開的資料型態。
  • handler(options, originalOptions, jqXHR)
    Type: Function()
    一個處理函式,用來設定往後的Ajax請求的預設值。
  • 傳回值: undefined

一個使用$.ajaxPrefilter()註冊的前置過濾器經典範例看起來像是下面的例子:

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
  // Modify options, control originalOptions, store jqXHR, etc
});

其中:

當客製化選項需要被處理時,前置過濾器是一個相當合適的選擇。用下面的程式碼來作為例子。如果客製化的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推薦載入中