$.ajaxTransport()
Ajaxデータのトランスポート(移送)を正確に扱うためのオブジェクトを生成します。
$.ajaxTransport( dataType, handler(options, originalOptions, jqXHR) ) 1.5追加
戻り値:undefined
引数 | 説明 |
---|---|
dataType |
型: 使用したいdataタイプを示す文字列を指定します。 |
handler(options, originalOptions, jqXHR) |
型: 最初の引数で指定された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
}
});
© 2010 - 2017 STUDIO KINGDOM