$.ajaxPrefilter()

Ajax通信によって送られるオプションを送信前に独自に制御したい場合に使用します。

$.ajaxPrefilter( [dataTypes], handler ) 1.6追加

戻り値:undefined

引数説明
[dataTypes] 制御対象となるdataTypeを限定したい場合に、dataType空白区切りの文字列で指定します。
handler(options, originalOptions, jqXHR) Ajax処理を制御する関数を指定します。
受け取る引数は、options, originalOptions, jqXHRの3つです。
options
リクエストに設定されているオプションです。
originalOptions
ajaxSettingsによって変更されていない、元のオプション値が格納されています。
jqXHR
リクエストのjqXHRオブジェクトです。
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
  //制御処理
});

下記のコードの例のように、abortOnRetryをtrueにして、同じURLであった場合に、リクエストを中断することが出来る。

var currentRequests = {};

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
  if ( options.abortOnRetry ) {
    if ( currentRequests[ options.url ] ) {
      currentRequests[ options.url ].abort();
    }
    currentRequests[ options.url ] = jqXHR;
  }
});

また、ajaxPrefilterを使えばクロスドメインが指定されたリクエストを自サイトのURLを介して行うように書き換えることが出来る。

$.ajaxPrefilter( function( options ) {
  if ( options.crossDomain ) {
    options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url );
    options.crossDomain = false;
  }
});

引数のdataTypesを指定すると、そのデータタイプの場合のみフィルターを適用します。

$.ajaxPrefilter( "json script", function( options, originalOptions, jqXHR ) {
  //jsonとscriptのリクエストの場合のみ適用される
});

$.ajaxPrefilter()は戻り値を指定することで、dataTypeを別のものに切り替えることも可能です。 下記の例では独自の関数isActuallyScript()で特定のURLが指定されていることを調べ、 該当した場合にdataTypeを"script"として処理を行います。

$.ajaxPrefilter(function( options ) {
  if ( isActuallyScript( options.url ) ) {
    return "script";
  }
});

 Back to top

© 2010 - 2017 STUDIO KINGDOM