jQuery.ajax()

jQuery.ajax( url [, settings] ) Returns: jqXHR

説明: 非同期 HTTP(Ajax)リクエストを実行します。

  • version added: 1.5 jQuery.ajax( url [, settings] )

    urlリクエストが送信されるURLを含む文字列。

    settingsAjaxリクエストを構成するキー/値ペアのセット。全ての settings はオプションです。 デフォルトのオプションは、$.ajaxSetup() で設定することができます。 全設定の完全なリストについては、以下の jQuery.ajax( settings ) を参照してください。

  • version added: 1.0 jQuery.ajax( settings )

    settingsAjaxリクエストを構成するキー/値ペアのセット。全ての settings はオプションです。 デフォルトのオプションは、$.ajaxSetup() で設定することができます。

    accepts Map
    デフォルト: depends on DataType

    コンテンツタイプは、返り値として受取るレスポンスの種類をサーバに指示しするため、リクエスト・ヘッダで送信されます。 accepts 設定を変更する必要がある場合、 $.ajaxSetup() で、一度そうすることをお勧めします。

    async Boolean
    デフォルト: true

    デフォルトでは、すべてのリクエストは非同期に送信されます(すなわち、デフォルトで true に設定されます)。 同期通信にしたい場合は、このオプションを false に設定します。クロスドメイン・リクエストと dataType: "jsonp" のリクエストは、同期通信をサポートしていません。 同期通信は、リクエストがアクティブである間、すべてのアクションを無効にするよう、一時的にブラウザをロックする ことに注意してください。

    beforeSend(jqXHR, settings) Function

    送信前に jqXHR(jQuery 1.4.xでは、XMLHttpRequest)オブジェクトの変更に使用することができる、 事前にリクエストするコールバック関数。 カスタム・ヘッダなどを設定するには、これを使用します。jqXHRと settings マップは、引数として渡されます。 これは、Ajax イベントです。 beforeSend 関数で false を返すと、リクエストはキャンセルされます。 jQuery 1.5 では、リクエストのタイプを問わず beforeSend オプションは呼ばれます。

    cache Boolean
    デフォルト: true, dataType が 'script' と 'jsonp' に対しては false

    false に設定した場合は、リクエストしたページがブラウザによってキャッシュされないように強制します。 キャッシュを false にすることによって、URL へ "_=[TIMESTAMP]" と言うクエリ文字列パラメータも付加されます。

    complete(jqXHR, textStatus) Function, Array

    リクエストが終了した(success または error のコールバックを実行後)ときに呼び出される関数。 関数は、渡される次の2つの引数を受取ります: jqXHR (jQuery 1.4.x では XMLHTTPRequest) オブジェクトと、リクエストのステータスを 分類した文字列 ("success""notmodified""error""timeout""abort""parsererror")。 jQuery 1.5 ではcomplete を設定することで、関数の配列を受け取ることができます。 各関数は順番に呼び出されます。これはAjax イベントです。

    contents(1.5 で追加) Map

    コンテンツタイプを指定して、jQueryがどのようにレスポンスをパースするかを決める、文字列/正規表現ペアのマップ。

    contentType String
    デフォルト: 'application/x-www-form-urlencoded'

    サーバにデータを送信する場合、この content-type を使用します。 デフォルトでは、ほとんどの場合に適する "application/x-www-form-urlencoded" です。 あなたが明示的に$ content-typeを渡す場合。Ajaxを()それは、常に(データが送信されていない場合でも)サーバに送信されます。データは常にUTF-8文字セットを使用してサーバに送信されます。あなたはサーバ側で適切にこれをデコードする必要があります。 明示的に $.ajax() へ content-type を渡す場合、常に(データを送信しない場合でも)それは、サーバへ送信されます。 データは、常にUTF-8文字セットを使用してサーバに送信されます; サーバ側では、適切にこれをデコードする必要があります。

    context Object

    このオブジェクトは、すべてのAjax関連のコールバックのコンテキストから作られます。 デフォルトで、コンテキストは、呼出しで使用する ajax の設定を表すオブジェクトです($.ajaxSettings は、 $.ajax に渡される設定とマージされます)。コンテキストは、要求の完全なコールバックのコンテキストは、このようにすることになりますようにDOM要素を指定する例 例えば、コンテキストに DOM 要素を指定すると、以下のような、リクエストの complete なコールバックの コンテキストを作ります:

    $.ajax({
      url: "test.html",
      context: document.body,
      success: function(){
        $(this).addClass("done");
      }
    });
    converters(1.5 で追加) Map
    デフォルト: {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML}

    dataType-to-dataType コンバーターのマップ。各コンバータの値は、レスポンスの変換後の値を返す関数です。

    crossDomain(1.5 で追加)
    デフォルト: 同一ドメインのリクエストの場合は false、クロスドメインリクエストの場合は true

    同一ドメインにクロスドメインリクエスト(例えば、JSONPなど)を強制したい場合は、クロスドメインの値に true を設定します。 これは、例えば、別ドメインへサーバーサイドのリダイレクトを可能にします。

    data Object, String

    サーバーに送信されるデータ。文字列でない場合は、クエリ文字列に変換されます。それは、GET-リクエストの URL に付加されます。 この自動処理を防止するためには、 processData オプションを参照してください。オブジェクトは、キー/値のペアでなければなりません。 値が配列の場合、jQueryは traditional 設定(後述)の値に基づいて同じキーで複数の値をシリアライズします。

    dataFilter(data, type) Function

    XMLHttpRequestの生のレスポンス・データを処理するために使用する関数。これは、レスポンスをサニタイズするプレフィルタリング関数です。 サニタイズされたデータを返す必要があります。関数は二つの引数を受取ります: サーバから返される生データと'dataType' パラメータ。

    dataType String
    デフォルト: Intelligent Guess (xml, json, script, or html)

    期待するサーバから戻されるデータのタイプを指定します。何も指定されていない場合、jQueryはレスポンスのMIMEタイプに基づいて、それを推測しようとします(XML MIMEタイプは、XMLが得られます1.4でJSONがJavaScriptオブジェクトが得られます、1.4スクリプトでスクリプトを実行され、他の何かになりますに基づいてそれを推論しようとします。 ) 文字列として返されます。利用可能なタイプ(および成功時のコールバックへの最初の引数として渡された結果)は以下のとおりです。 (XMLのMIMEタイプはXMLが、1.4でのJSONはJavaScriptオブジェクトが得られ、1.4でのスクリプトはスクリプトを実行し、それ以外は文字列として返されます)。使用可能なタイプ(および成功時のコールバックへの最初の引数として渡される結果)は以下の通りです:

    • "xml": jQueryを介して処理できるXMLドキュメントを返します。
    • "html":プレーンテキストとしてHTMLを返します。DOMに挿入されたときにインクルードされている script タグが評価されます。
    • "script": レスポンスをJavaScriptとして評価し、プレーンテキストで返します。cachetrue に設定いない場合、URLにクエリ文字列パラメータ、"_=[TIMESTAMP]" を付加することでキャッシュを無効にします。 注: これは、POST をリモート·ドメイン·リクエスト用の GET に切替えます。
    • "json": レスポンスをJSONとして評価し、JavaScriptオブジェクトを返します。 jQuery 1.4 で、 JSON データは厳密な方法で解析されます; 不正な形式のJSONは拒否され、パース・エラーがスローされます。 (適切なJSONフォーマットの詳細については、json.org を参照してください。)
    • "jsonp": JSONP を使用して JSON ブロック 内にロードされます。コールバックを指定するために、特別な "?callback=?" をURLの終わりに追加します。 cache オプションに true を設定しない限り、URLにクエリ文字列パラメータ、 "_=[TIMESTAMP]" を付加することでキャッシュは無効になります。
    • "text": プレーンテキスト文字列。
    • スペース区切りの複数の値: jQuery 1.5 では、jQueryは Content-Type ヘッダで受信したものから あなたが必要とするものへ dataType を変換することができます。 例えば、テキスト・レスポンスをXMLとして取扱いたい場合は、dataType に対して "text xml" を使用します。 JSONPリクエストをすることができます。テキストとして受信し、XMLとして jQuery によって解釈する場合の例です: "jsonp text xml"。 同様に、"jsonp xml" ようなショートハンド文字列は、最初に jsonp から xml への変換を試み、それが失敗したら jsonp から テキストへ、次にはテキストからxmlに変換しようとします。
    error(jqXHR, textStatus, errorThrown) Function

    リクエストが失敗した場合、この関数が呼出されます。関数は、3つの引数を受取ります: jqXHR(jQuery 1.4.xでは、XMLHttpRequest)オブジェクト、発生したエラーのタイプを記述する文字列、何れかが発生した場合はオプションの例外オブジェクト。 第2引数に使用可能な値(null 以外)は、"timeout""error""abort""parsererror" です。 HTTPエラーが発生した場合、errorThrownは、 "Not Found" または、"Internal Server Error" のような HTTPステータスのテキスト部分を受取ります。 jQuery 1.5 での error 設定は、関数の配列を受取ることができます。各関数は順番に呼び出されます。 注: このハンドラは、クロスドメイン・スクリプトとJSONPリクエストに対しては呼出されません。 これは、Ajax イベントです。

    global Boolean
    デフォルト: true

    このリクエストに対してグローバル Ajax イベントハンドラをトリガするかどうかを指定します。デフォルトは true です。 ajaxStart または ajaxStop のようなグローバルハンドラがトリガされないようにするには、 false を設定します。 これは、様々な Ajax イベントを制御するために使用することができます。

    headers(1.5 で追加) Map
    デフォルト: {}

    リクエストと共に送る追加のヘッダー・キー/値のペアのマップ。この設定は、beforeSend 関数が呼出される前に設定されます; したがって、ヘッダーの設定のいずれかの値も beforeSend 関数内から上書きすることができます。

    ifModified Boolean
    デフォルト: false

    レスポンスが最後のリクエストから変更された場合のみ、リクエストが成功したことを許容します。 これは、Last-Modifiedヘッダをチェックすることによって行われます。ヘッダーを無視して、デフォルト値は false です。 jQueryの1.4では、この技術は、変更されていないデータをキャッチするために、サーバによって指定された 'etag' も確認します。

    isLocal(1.5.1 で追加) Boolean
    デフォルト: 現在の location プロトコルに依存する

    Queryがデフォルトでは認識していないような場合でも、現在の環境が "local"(ファイルシステムなど)として認識することができます。 次のプロトコルは、現在、ローカルとして認識されています: file*-extensionwidgetisLocal 設定の修正が必要な場合、$.ajaxSetup() メソッドで一旦実施することが推奨されています。

    jsonp String

    jsonp リクエストのコールバック関数名をオーバーライドします。この値は、url におけるクエリ文字列の一部である 'callback=?' の 'callback' の代わりに使用されます。 従って、{jsonp:'onJSONPLoad'} は、結果的に 'onJSONPLoad=?' がサーバに渡されます。 jQuery 1.5 ではjsonpオプションに false を設定すると、jQuery が URLに "?callback" という文字列を追加したり、または変換のために "=?" を使おうとすることを防止ます。 この場合は、明示的に jsonpCallback を設定しなければなりません。例、{ jsonp: false, jsonpCallback: "callbackName" }

    jsonpCallback String, Function

    JSONPリクエストのコールバック関数名を指定します。この値は、jQueryにより自動的に生成されたランダムな名前の代わりに使用されます。 リクエストを管理し、コールバックとエラー処理を提供することをより簡単にするために、jQueryにユニークな名前を生成させることが望まれます。 GETリクエストの、優れたブラウザのキャッシュを有効にしたい場合は、コールバックを指定することができます。 jQuery 1.5 では、この設定のために関数を使用することもできます。その場合、jsonpCallback の値は その関数の戻り値に設定されます。

    mimeType(1.5.1 で追加) String

    XHR MIMEタイプをオーバーライドするMIMEタイプ。

    password String

    HTTPアクセス認証リクエストへのレスポンスで使用するパスワード。

    processData Boolean
    デフォルト: true

    デフォルトでは、オブジェクト(技術的には、文字列以外)としてデータ・オプションに渡されたデータは処理され、 デフォルト content-type "application/x-www-form-urlencoded" にフィットするように、クエリ文字列に変換されます。 DOMDocument、または他の非処理データを送信する場合は、このオプションを false に設定します。

    scriptCharset String

    "jsonp" または "script" dataType と "GET" タイプのみ。 特定の文字セットとして解釈されるようにリクエストへ強制します。 リモートとローカル・コンテンツの文字セットの違いだけが必要です。

    statusCode(1.5 で追加) Map
    デフォルト: {}

    数値のHTTPコードと、レスポンスに対応するコードがある場合に呼ばれる関数のマップ。 次の例では、レスポンス・ステータスが 404 の場合、警告が表示されます:

    $.ajax({
      statusCode: {
        404: function() {
          alert('page not found');
        }
      }
    });

    リクエストが成功した場合は、ステータスのコード関数は成功時のコールバックと同じパラメータを取ります; クエストがエラーの場合は、error コールバックと同じパラメータを取ります。

    success(data, textStatus, jqXHR) Function, Array

    リクエストが成功した場合、この関数が呼出されます。関数には、3つの引数を渡します: dataType ラメータに従ってフォーマットされた、サーバーから返されたデータ; ステータスを記述する文字列; および jqXHR(jQuery 1.4.x では、XMLHttpRequest)オブジェクト。 jQuery 1.5 では成功の設定は関数の配列を受取ることができます。各関数は順番に呼出されます。 これは、Ajax イベントです。

    timeout Number

    リクエストのタイムアウト(ミリ秒単位)を設定します。これは、$.ajaxSetup() により設定された全てのグローバルタイムアウトをオーバーライドします。 タイムアウトの時間は、$.ajax 呼び出しが行われた時点から始まります; もし、他のいくつかのリクエストが処理中で、ブラウザが接続できない場合は、送信される前に、 タイムアウトをリクエストする可能性があります。 jQuery 1.4.x 以前では、リクエストがタイムアウトした場合、XMLHttpRequestオブジェクトが無効な状態になります; オブジェクトのメンバにアクセスすると例外がスローされます。Firefox 3.0+ だけは 、スクリプトとJSONPのリクエストをタイムアウトによってキャンセルすることはできません; タイムアウト時間に達した場合でも、スクリプトは実行されます。

    traditional Boolean

    paramのシリアライゼーションに従来のスタイルを使用したい場合、 これを true に設定します。

    type String
    デフォルト: 'GET'

    リクエストのタイプ("POST" または "GET")、デフォルトは "GET"。 注: PUT や DELETE などのような他の HTTP リクエスト・メソッドも、ここで使用することができますが、 全てのブラウザでサポートされているわけでありません。

    url String
    デフォルト: 現在のページ

    リクエストが送信される URL を含む文字列。

    username String

    HTTPアクセス認証リクエストのレスポンスで使用することができるユーザ名。

    xhr Function
    デフォルト: IE の時は ActiveXObject、それ以外は XMLHttpRequest

    XMLHttpRequestオブジェクトを作成するためのコールバック。デフォルトは、IE の時は ActiveXObject、それ以外は XMLHttpRequestです。 XMLHttpRequest に対する独自の実装を提供するためにオーバーライドするか工場出荷時の機能強化を行います。

    xhrFields(1.5.1 で追加) Map

    ネイティブ XHR オブジェクトに設定する、fieldName-fieldValue のペアのマップ。 例えば、クロスドメイン・リクエストの必要に応じて、withCredentialstrue を設定するため使用することができます。

    $.ajax({
       url: a_cross_domain_url,
       xhrFields: {
          withCredentials: true
       }
    });

    jQuery 1.5 ではwithCredentials プロパティはネイティブ XHR に伝達さません。 従って、それを必要とするCORS リクエストは、このフラグを無視します。 この理由で、jQuery 1.5.1+を使用することを推奨します。

$.ajax() 関数は、jQueryによって送信されるリクエストのすべて基礎となります。 $.get() および .load() のような高レベルでより使いやすい 関数が使用できるので、多くの場合、直接この関数を呼ぶことは不要です。しかし、さほど一般的ではないオプションが必要な場合、 $.ajax()はより柔軟に使用することができます。

最も簡単な例として、$.ajax() 関数を引数なしで呼出します:

$.ajax();

注: デフォルトの設定は、$.ajaxSetup() 関数を使用して グローバルに設定することができます。

この例は、どのオプションも使用しないで、現在のページのコンテンツをロードしますが、結果を何もしません。 結果を使用するには、コールバック関数を1つ実装することができます。

jqXHR オブジェクト

jQuery 1.5 の $.ajax() により返された jQuery XMLHttpRequest(jqXHR)オブジェクトは、 ブラウザのネイティブ XMLHttpRequest オブジェクトのスーパーセットです。 例えば、それには、getResponseHeader() メソッドだけでなく responseTextresponseXML プロパティが含まれています。 転送メカニズムがXMLHttpRequest以外(例えば、JSONPリクエストのスクリプトタグ)である場合、jqXHR オブジェクトは、 可能であればネイティブ XHR 機能をシミュレートします。

jQueryの1.5.1 時点でjqXHR オブジェクトには、overrideMimeType() メソッドも 含まれています(それは、jQuery 1.4.x で使用可能でしたが、一時的にjQuery 1.5 で削除されていました)。 .overrideMimeType() メソッドは、例えば content-type ヘッダの応答を変更するために、 beforeSend() コールバック関数で使用することができます:

$.ajax({
  url: 'http://fiddle.jshell.net/favicon.png',
  beforeSend: function( xhr ) {
    xhr.overrideMimeType( 'text/plain; charset=x-user-defined' );
  },
  success: function( data ) {
    if (console && console.log){
      console.log( 'Sample of data:', data.slice(0,100) );
    }
  }
});

jQuery 1.5 では、$.ajax() によって返される jqXHR オブジェクトは、Promiseインターフェースを実装し、 Promiseのすべてのプロパティ、メソッド、および動作を与えます(詳細についてはDeferredオブジェクトを参照してください)。 $$.ajax() で使用するコールバック名による利便性と一貫性のために、jqXHR も .error().success().complete() メソッドを提供します。 これらのメソッドは、$.ajax() リクエストが終了するときに呼出される関数を引数に取ります。 関数は、対応して名付けられた $.ajax() コールバックと同じ引数を受け取ります。 これは、1回のリクエストに複数のコールバックを割当てを可能にし、リクエストが完了した後にコールバックを割り当てることさえ可能にします。(リクエストが既に完了している場合、コールバックがすぐに実行解雇されています。)

廃止のお知らせ: jqXHR.success()jqXHR.error()jqXHR.complete() コールバックは、jQuery 1.8 で廃止される予定です。最終的な削除に向けたコードの準備のためには、代りに jqXHR.done()jqXHR.fail()jqXHR.always() を使用してください。

// リクエスト直後にハンドラを割り当て、
// このリクエストの jqxhr オブジェクトを記憶する
var jqxhr = $.ajax( "example.php" )
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });
// ここで他の作業を実行する ...
// 上記リクエストを完成させるのために別の関数を設定する
jqxhr.always(function() { alert("second complete"); });

XMLHttpRequest との下位互換性のために、jqXHR オブジェクトは、 次のプロパティとメソッドを公開しています:

  • readyState
  • status
  • statusText
  • 基本的なリクエストへ xmlおよび(または)テキストで応答する時、responseXML および(または) responseText
  • 古い値に新しい値に連結するのではなく、古い値を新しい値で置換することで標準を変更する setRequestHeader(name, value)
  • getAllResponseHeaders()
  • getResponseHeader()
  • abort()

しかしながら、successerrorcompletestatusCodeは、考えられる必要条件をすべてカバーするので、onreadystatechangeメカニズムは提供されません。

コールバック関数のキュー

beforeSenderrordataFiltersuccesscomplete オプション すべては、適切な時点で呼出すコールバック関数を受け入れます。

jQuery 1.5 ではerror (fail)、success (done)、complete (jQuery 1.6 では、always)コールバック・フックは、先入先出法で管理されるキューです。 (フック(Hook)は、プログラム中の特定の箇所に、利用者が独自の処理を追加できるようにする仕組みである。また、フックを利用して独自の処理を追加することを「フックする」という。-- wikipedia から)。 これは、各フックに複数のコールバックを割り当てできることを意味します。$.ajax() コールバック・フックが内部的 に実装されている繰延オブジェクトのメソッドを参照してください。

全コールバック内の this 参照は、設定の中で$ $.ajax に渡された context オプション のオブジェクトです; もし context を指定をしなければ、this は、Ajax 設定自体への参照です。

JSONP や、クロスドメイン GET リクエストのようないくつかのタイプでは、XHR を使用しないでください; それらの場合、 コールバックに渡す XMLHttpRequesttextStatus パラメーターは未定義になります。

ここに $.ajax() で提供されるコールバック・フックがあります:

  1. beforeSend コールバックが呼出されます; jqXHR オブジェクトとパラメータとして settings マップを受信します。
  2. error コールバックは、リクエストが失敗した場合に登録順に呼出されます。適用可能な場合、jqXHR、エラー・タイプの種類を示す文字列、および例外オブジェクトを受信します。いくつかの組込みのエラーは、例外オブジェクトとして文字列を提供します: "abort", "timeout", "No Transport"。
  3. dataFilter コールバックは、応答データを正常に受信した場合、直ぐに呼び出されます。 それは、戻されたデータと dataType の値を受信して、success に渡す(おそらく変更)データを返す必要があります。
  4. success コールバックは、リクエストが成功した場合に登録順に呼出されます。それらは、戻されたデータ、 success コードを含む文字列、および jqXHR オブジェクトを受信します。
  5. complete コールバックは、リクエストが成功・失敗にかかわらず完了した場合に、登録順に起動されます。 それらは jqXHR オブジェクトと、成功またはエラーのコードを含む文字列も受信します。

例えば、戻された HTML を利用するために、success ハンドラを実装することができます:

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  }
});

Data タイプ

$.ajax() 関数は、取得するデータに対する情報を提供するサーバに依存します。サーバが、XMLとしてデータを返したと 報告した場合、結果は通常のXMLメソッドまたはjQueryのセレクタを使用してトラバースすることができます。 別のタイプ、上記例ではHTMLとして検出された場合、データはテキストとして取り扱われます。

別なデータ処理は、dataType オプションを使用するこで達成ができます。プレーン xml に加えて、 dataType は、htmljsonjsonpscripttext にすることができます。

textxml タイプは、未処理のデータを返します。単に、データはそれぞれ、 jqXHR オブジェクトの responseText または responseXML プロパティのいずれかを通して、 成功したハンドラに渡されます。

注: Webサーバから報告されたMIMEタイプが、選択した dataType と一致していることを確認する必要があります。特に、XMLは、一貫性のある結果を得るためには text/xml または dataType としてサーバにより 宣言されていなければなりません。

html が指定された場合は、HTMLが文字列として返される前に、取得したデータに埋め込まれた全てのJavaScriptは実行されます。 Similarly, script will execute the JavaScript that is pulled back from the server, then return nothing.(同様に、スクリプトは、サーバから引き戻されているJavaScriptが実行され、その後何も返さない。)

json タイプは、JavaScript オブジェクトとして、取り出されたデータ・ファイルをパースし、 結果データとして、構成されたオブジェクトを戻します。 これを行うために、ブラウザがサポートしている場合、jQuery.parseJSON() を使用します; それ以外の場合は、 Function コンストラクタを使用します。 不正な形式のJSONデータは、パースエラーがスローされます(詳細については json.org を参照してください)​​。 JSONデータは、簡潔でJavaScriptをパースするために、簡単な方法で構造化データを通信するために便利です。フェッチしたデータファイルがリモートサーバー上に存在する場合は、代わりにJSONPの種類を指定します。 JSONデータは、簡潔でJavaScriptがパースし易い方法で構造化データを通信するのに便利です 取出すデータファイルがリモートサーバ上に存在する場合は、代わりに jsonp タイプを指定します。

jsonp タイプは、クエリ文字列パラメータ callback=? を URL に付加します。 サーバが妥当なJSONPレスポンスを作るために、コールバック名をJSONデータの前に付加する必要があります。 $.ajax() に、jsonp オプションを使用して callback 以外のパラメータ名を指定できます。

注: JSONP は、JSON形式の拡張で、クエリ文字列パラメータを検出して処理するためのサーバ・サイド・コードを必要とします。その詳細については、original post detailing its use に記載されています。

データをリモートサーバから取得する時(これは、script または jsonp データ・タイプを使用してのみ可能です)、error のコールバック、およびグローバルイベントが発生することはありません。

サーバへのデータ送信

デフォルトで、Ajaxリクエストは、GET HTTPメソッドを使用して送信されます。 POSTメソッドが必要な場合は、type オプションの値を設定することによって、このメソッドを指定することができます。このオプションは、data オプションのコンテンツをサーバに送信する方法に影響を与えます。 POSTデータは、常にW3C XMLHTTPRequest標準によって、UTF-8文字セットを使用してサーバへ送信されます。

data オプションは、クエリ文字列形式 key1=value1&key2=value2 か、マップ形式 {key1: 'value1', key2: 'value2'} のいずれかを指定することができます。 後者の形式が使用されている場合、データは、送信前に jQuery.param() を使用してクエリ文字列に変換されます。この処理は、 processDatafalse を 設定することで回避できます。XMLオブジェクトをサーバに送信したい場合は、処理は不適当かもしれません; この場合には、 application/x-www-form-urlencoded から、適切な MIME タイプへ contentType オプションを変更してください。

高度なオプション

global オプションは、.ajaxSend().ajaxError() 、及びこのリクエストがそれらをトリガする時に始動する同じ様なメソッドを使って登録された処理を防ぎます。 これは、例えば、リクエストが頻繁に行われてかつ短い場合、.ajaxSend() により実装されるローディングインジケータを消去するのに便利です。クロスドメインスクリプトとJSONPリクエストにより、 グローバルオプションは自動的に false に設定されます。詳細については、以下のこれらのメソッドの説明を参照してください。

サーバがレスポンスを返する前に HTT P認証を実行する場合、ユーザ名とパスワードのペアは、usernamepassword オプションを使用して送信することができます。

Ajaxリクエストは、時間制限されるので、優れたユーザ・エクスペリエンスを提供するため、エラーのキャッチと処理を行うことができます。 リクエストのタイムアウトは、通常デフォルトのままか、timeout オプションで特定のリクエストために オーバーライドするよりは、$.ajaxSetup() を使用してグローバル・デフォルト として設定します。

デフォルトでは、リクエストが常に発っせられてますが、ブラウザはキャッシュから結果を提供することができます。 キャッシュされた結果の使用を禁止するには、cachefalse に設定します。 アセットが最後のリクエスト以降に変更されていない場合、リクエストは失敗を報告する原因になるために、 ifModifiedtrue を設定します。

scriptCharset は、<script> タグを使用する(すなわち、script または jsonpタイプ)リクエストのために、文字セットを明示的に指定することを可能にします。 これは、スクリプトとホスト·ページの文字セットが異なっている場合に便利です。

Ajaxの最初の文字 "asynchronous(非同期)" は、操作が並行して行われ、完了の順序は保証されていないことを意味しています。 $.ajax() デフォルトへ、async オプションを true にすると、リクエストした後も コード実行が続くことを示します。 このオプションを false (非同期ではなくなる) に設定すると、ブラウザが応答しなくなる原因となりますので、強く推奨しません。

$.ajax() 関数は、作られた XMLHttpRequest オブジェクトを返します。 通常、jQueryは内部でこのオブジェクトの作成をしますが、それを製造するためのカスタムの関数は、xhr オプションを使用して指定できます。返されたオブジェクトは、一般的に破棄することができますが、リクエストを観察し、操作するための低レベルのインタフェースを提供します。 特に、完了する前にオブジェクトの .abort() を呼出すことで、リクエストを停止させます。

現在.getResponseHeader('Content-Type') は空でない文字列を返しますが、 .getAllResponseHeaders() が空の文字列を返すという Firefox のバグのため、Firefox での jQuery による JSON CORS レスポンスを自動的にデコードすることはサポートされていません。

次のように jQuery.ajaxSettings.xhr をオーバーライドすることで、これを回避することができます:

var _super = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
    var xhr = _super(),
        getAllResponseHeaders = xhr.getAllResponseHeaders;
    xhr.getAllResponseHeaders = function () {
        if ( getAllResponseHeaders() ) {
            return getAllResponseHeaders();
        }
        var allHeaders = "";
        $( ["Cache-Control", "Content-Language", "Content-Type",
                "Expires", "Last-Modified", "Pragma"] ).each(function (i, header_name) {
            if ( xhr.getResponseHeader( header_name ) ) {
                allHeaders += header_name + ": " + xhr.getResponseHeader( header_name ) + "\n";
            }
            return allHeaders;
        });
    };
    return xhr;
};

Ajaxの拡張

jQuery 1.5 でのjQueryのAjax実装には、大きな柔軟性を持った Ajax の拡張を可能にするため、 prefilter、converter、transport が含まれています。これらの高度な機能の詳細については、 拡張 Ajax のページを参照してください。

補注:

  • ブラウザのセキュリティ制限のため、ほとんどの "Ajax" リクエストは 同一生成元ポリシーに 従います; リクエストは、別なドメイン、サブドメイン、またはプロトコルから正常にデータを取得することはできません。
  • Script と JSONP のリクエストは、同一生成元ポリシー制約の対象にはなりません。

例:

例:サーバにデータを保存し、完了後はユーザに通知します。

$.ajax({
  type: "POST",
  url: "some.php",
  data: "name=John&location=Boston",
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

例:HTMLページの最新版を取得します(キャッシュを無効にする)。

$.ajax({
  url: "test.html",
  cache: false,
  success: function(html){
    $("#results").append(html);
  }
});

例:XMLドキュメントをデータとしてサーバへ送信します。 ProcessData オプションに false を設定することで、文字列へデータの自動変換が防止されます。

var xmlDocument = [create xml document];
var xmlRequest = $.ajax({
  url: "page.php",
  processData: false,
  data: xmlDocument
});
xmlRequest.done(handleResponse);

例:データとして id をサーバに送信して、サーバへあるデータを保存して、完了した時にはユーザ へ通知します。リクエストが失敗した場合は、ユーザに警告を出します。

var menuId = $("ul.nav").first().attr("id");
var request = $.ajax({
  url: "script.php",
  type: "POST",
  data: {id : menuId},
  dataType: "html"
});
request.done(function(msg) {
  $("#log").html( msg );
});
request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

例:JavaScript ファイルをロードして実行します。

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"
});