jQuery逆引きリファレンス
一般的なAjax通信を実装するには?($.ajax)
非同期通信の動作をより細かく制御したい場面で使える$.ajaxメソッドの構文と利用可能なパラメーター群の概要を紹介。簡単なサンプルで使い方を説明する。
jQueryでAjax通信の基本的な機能を担うのは、$.ajax
メソッドです。本連載では、すでにload
、$.get
、$.post
、$.getJSON
などのメソッドを紹介してきましたが、これらのメソッドも内部的には$.ajax
メソッドを利用しています。つまり、load
、$.get
、$.post
、$.getJSON
といったメソッドは、「$.ajax
メソッドの簡易構文」といえます。
一般的には、それで賄えるならば簡易構文を優先して利用すれば十分です。しかし、非同期通信の動作をより細かく制御したいという状況では、$.ajax
メソッドを、という使い分けになることでしょう*1。
$.ajax
メソッドの構文は、以下の通りです。
[構文]$.ajaxメソッド
$.ajax(url [,settings])
- url: アクセス先のパス
- settings: 通信時の設定パラメーター(「パラメーター名: 値」のハッシュ)
- *1 ただし、jQuery 1.12/2.2以降では、
$.get
/$.post
メソッドにも第2引数としてsettings
(設定パラメーター)を渡せるようになりました。
引数settings
で利用可能なパラメーターには、以下のようなものがあります。
分類 | パラメーター名 | 概要 |
---|---|---|
基本 | type | 通信に利用するHTTPメソッド(デフォルトはGET) |
dataType | 応答データの種類(text、html、xml、json、jsonp、script) | |
data | 送信するデータ(「キー名: 値」のハッシュ形式) | |
headers | リクエスト時に送信するヘッダー(「ヘッダー名: 値」のハッシュ形式) | |
コールバック | beforeSend | リクエスト送信前に実行されるコールバック関数 |
converters | dataType オプション単位のコンバーター(「dataType値: コンバーター」のハッシュ形式)。デフォルトは「{"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML}」 |
|
dataFilter | レスポンスデータを処理するためのコールバック関数 | |
設定 | accepts | 期待する応答のデータ型 |
cache | 通信結果をキャッシュするか。デフォルトはtrue(ただし、dataType="script"/"jsonp" の場合はfalse) |
|
contentType | リクエスト時に利用するContent-Typeヘッダー(デフォルトはapplication/x-www-form-urlencoded; charset=UTF-8) | |
context | コールバック関数のコンテキスト | |
crossDomain | クロスドメインのリクエストか | |
global | $.ajaxXxxxx イベントを処理するか(デフォルトはtrue) |
|
ifModified | trueの場合、応答に変更がある場合にだけ成功ステータスを返す(デフォルトはfalse) | |
jsonp | JSONPリクエストのコールバック関数名 | |
processData | data パラメーターの内容をクエリ情報に変換するか(デフォルトはtrue) |
|
scriptCharset | スクリプトを読み込む際に利用する文字コード(例:"UTF-8"など)(dataType= が"script"や"jsonp"などの場合のみ使用できる) |
|
timeout | タイムアウト時間 | |
xhrFields | ネイティブなXMLHttpRequest オブジェクトに設定するフィールド値(「フィールド名: 値」のハッシュ形式) |
|
認証 | username | 認証時に利用するユーザー名 |
password | 認証時に利用するパスワード |
以下では、$.ajax
メソッドの基本的な例として、別稿「TIPS:HTTP GET/POSTで非同期通信を実施するには?」のサンプルを、$.ajax
メソッドを使って書き換えてみましょう。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>jQuery TIPS</title>
</head>
<body>
<form>
<div>
<label for="keyword">キーワード:</label>
<input id="keyword" type="text" size="20" />
<input id="search" type="button" value="検索" />
</div>
<ul id="result" class="ajax"></ul>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(function() {
// [検索]ボタンクリックで検索開始
$('#search').click(function() {
// .phpファイルへのアクセス
$.ajax('get.php',
{
type: 'get',
data: { query: $('#keyword').val() },
dataType: 'xml'
}
)
// 検索成功時にはページに結果を反映
.done(function(data) {
// 結果リストをクリア
$('#result').empty();
// <Question>要素(個々の質問情報)を順番に処理
$('Question', data).each(function() {
// <Url>(詳細ページ)、<Content>(質問本文)を基にリンクリストを生成
$('#result').append(
$('<li></li>').append(
$('<a></a>')
.attr({
href: $('Url', this).text(),
target: '_blank'
})
.text($('Content', this).text().substring(0, 255) + '...')
)
);
});
})
// 検索失敗時には、その旨をダイアログ表示
.fail(function() {
window.alert('正しい結果を得られませんでした。');
});
});
});
</script>
</body>
</html>
|
※このコードを試す際には、キーワード入力後にEnterキーではなく[検索]ボタンクリックをする必要があるので注意すること。
コードの詳細な解説については別稿を参照いただくとして、本稿で注目すべきは太字の箇所です。この例では、
HTTP GET(
type
パラメーター)でget.phpに対して、「query=テキストボックスの入力値」(data
パラメーター)というクエリ情報を渡すこと、
戻り値としてxml文書を期待すること(dataType
パラメーター)
を指定して、Ajax通信を実施しています。成功/失敗時の処理にdone
/fail
メソッドを利用する点は$.get
メソッドと変わりありません。
本稿では、まずは基本的なパラメーターだけを利用しましたが、その他のパラメーターについても、後日別稿で個別に解説していく予定です。
API:jQuery.ajax() カテゴリ:Ajax > Low-Level Interface(低レベルインターフェース)
※以下では、本稿の前後を合わせて5回分(第57回~第61回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
57. 既存の要素をコピーするには? ― cloneメソッド
既存の要素をjQueryオブジェクトとして複製する方法を説明。オブジェクトはappendToなどの挿入系メソッドを使ってHTMLソース内に要素として追加したりできる。
59. 【現在、表示中】≫ 一般的なAjax通信を実装するには?($.ajax)
非同期通信の動作をより細かく制御したい場面で使える$.ajaxメソッドの構文と利用可能なパラメーター群の概要を紹介。簡単なサンプルで使い方を説明する。
60. 非同期通信のキャッシュを無効化するには?($.ajax[cache])
Ajax通信の結果をキャッシュするか否かを制御できる「$.ajaxメソッドのcacheパラメーター」の基本的な使い方を説明する。
61. Ajax通信の前に処理を実行するには?($.ajax[beforeSend])
Ajax通信を送信する前に任意の処理を実行できるようになる「$.ajaxメソッドのbeforeSendパラメーター」の基本的な使い方を説明する。