$.ajaxTransport()

Ajaxデータのトランスポート(移送)を正確に扱うためのオブジェクトを生成します。

$.ajaxTransport( dataType, handler(options, originalOptions, jqXHR) ) 1.5追加

戻り値:undefined

引数説明
dataType

型:String

使用したいdataタイプを示す文字列を指定します。

handler(options, originalOptions, jqXHR)

型:Function()

最初の引数で指定されたdataタイプで使用する新規のトランスポート·オブジェクトを返す関数を指定します。

トランスポートは$.ajax()のリクエストによって内部で使用するsendとabortの2つのメソッドを提供するオブジェクトです。 トランスポートは$.ajax()を拡張する最高位の方法で、プレフィルタやコンバータが使用できない場合の最後の手段として使用するべきです。

各リクエストは自身のトランスポートオブジェクトのインスタンスを必要としているため、直接登録されることが出来ません。 その代わりとして、トランスポートを返す関数を提供する必要があります。

トランスポートのファクトリーは$.ajaxTransport()の使用することで登録されます。 一般的な登録は次のようになります。

$.ajaxTransport( function( options, originalOptions, jqXHR ) {
  if( /* transportCanHandleRequest */ ) {
    return {
      send: function( headers, completeCallback ) {
        /* send code */
      },
      abort: function() {
        /* abort code */
      }
    };
  }
});
項目 説明
options リクエストオプション
originalOptions originalOptionsはajaxメソッドに提供される、ajaxSettingsによって初期化されない、修正されていないオプションです。
jqXHR リクエストのjqXHRオブジェクトです。
headers サポートしていればトランスポートが運ぶことが出来る、リクエストヘッダーのキーと値のオブジェクトです。
completeCallback Ajaxのリクエストが完了した際に使用されるコールバックです。

completeCallbackは下記の特徴を持ちます。

function( status, statusText, responses, headers ) {}
項目 説明
status 受信したHTTPステータスコードです。 一般的に、200は成功、404はページやリソースが見つからなかった場合などです。
statusText 受信したステータステキストです。
responses(Optional) dataタイプ/値を含むオブジェクトで、トランスポートが提供することが出来る全てのフォーマットのレスポンスを含みます。 (例えば、ネイティブのXMLHttpRequestオブジェクトがレスポンスに{xml: XMLData, text: textData}としてセットされます。
headers(Optional)

トランスポートがアクセスした、全てのレスポンスヘッダーを含んだ文字列です。 (XMLHttpRequest.getAllResponseHeaders()が提供する同種のもの(?))

headers(Optional) is a string containing all the response headers if the transport has access to them (akin to what XMLHttpRequest.getAllResponseHeaders() would provide).

プレフィルタ同様、トランスポートのファクトリー関数は特定のdataタイプを紐付ける事が可能です。

$.ajaxTransport( "script", function( options, originalOptions, jqXHR ) {
    /* scriptのリクエストしか呼び出せなくなります。*/
});

下記の例では、最小限の画像のトランスポートの実装方法を示しています。

$.ajaxTransport( "image", function( s ) {
  if ( s.type === "GET" && s.async ) {
    var image;
    return {
      send: function( _ , callback ) {
        image = new Image();
        function done( status ) {
          if ( image ) {
            var statusText = ( status == 200 ) ? "success" : "error",
            tmp = image;
            image = image.onreadystatechange = image.onerror = image.onload = null;
            callback( status, statusText, { image: tmp } );
          }
        }

        image.onreadystatechange = image.onload = function() {
          done( 200 );
        };

        image.onerror = function() {
          done( 404 );
        };

        image.src = s.url;
      },

      abort: function() {
        if ( image ) {
          image = image.onreadystatechange = image.onerror = image.onload = null;
        }
      }
    };
  }
});

カスタムdataタイプの処理

jQueryのAjax実装は、テキスト、JSON、XML、HTMLなどの標準的なdataタイプが付属しています。 $.ajaxSetup()のconvertersオプションを使用して、$.ajax()によるdataタイプの変換処理を拡張または修正します。 非圧縮のjQueryソースはデフォルトのコンバーターリストを含み、これらがどのように使用されるかを分かりやすく説明しています。

// List of data converters
// 1) key format is "source_type destination_type"
//    (a single space in-between)
// 2) the catchall symbol "*" can be used for source_type
converters: {

  // Convert anything to text
  "* text": window.String,

  // Text to html (true = no transformation)
  "text html": true,

  // Evaluate text as a json expression
  "text json": jQuery.parseJSON,

  // Parse text as xml
  "text xml": jQuery.parseXML
}

$.ajaxSetup()によってグローバルに、または$.ajax()を呼び出すごとに、convertersオプションを指定する場合、 オブジェクトはデフォルトのconvertersによってマッピングされ、他の値を損なわないように指定した値を上書きします。

例えば、jQueryのソースは$.ajaxSetup()を使用して、converterに"text script"を追加しています。

jQuery.ajaxSetup({
  accepts: {
    script: "text/javascript, application/javascript"
  },
  contents: {
    script: /javascript/
  },
  converters: {
    "text script": jQuery.globalEval
  }
});

 Back to top

© 2010 - 2017 STUDIO KINGDOM