【jQuery】$.get()でGETリクエストを送信する完全ガイド|URLパラメーター・JSON取得・キャッシュ制御・fetch比較まで

jQueryの $.get() を使うと、ページをリロードせずにサーバーからデータを取得できます。この記事では基本的なGET送信・URLパラメーターの扱い・JSONデータ取得・キャッシュ制御・Fetch APIとの比較まで解説します。

この記事でわかること

  • $.get() の基本的な使い方とPromiseチェーン
  • URLパラメーターをオブジェクトで渡す方法
  • JSONデータを取得する($.getJSON)
  • キャッシュを無効化する方法
  • $.ajax() / fetch() との使い分け
スポンサーリンク

$.get() の基本的な使い方

// $.get(url, data, callback)
$.get('/api/users', function (response) {
  console.log('ユーザー一覧:', response);
});

// Promiseチェーンで書く(推奨)
$.get('/api/users')
  .done(function (data, textStatus, jqXHR) {
    console.log('成功:', data);
    console.log('ステータス:', jqXHR.status); // 200
  })
  .fail(function (jqXHR, textStatus, errorThrown) {
    console.error('エラー:', jqXHR.status, errorThrown);
  })
  .always(function () {
    // 成功・失敗に関わらず実行(ローディング非表示など)
    $('#loading').hide();
  });

URLパラメーターをオブジェクトで渡す

データをオブジェクトで渡すと、jQueryが自動的にURLエンコードしてクエリ文字列に変換します。

// オブジェクトで渡す → /api/users?page=2&limit=20&keyword=%E5%B1%B1%E7%94%B0 に変換
$.get('/api/users', {
  page:    2,
  limit:   20,
  keyword: '山田'
})
  .done(function (data) {
    console.log('取得件数:', data.length);
  });

// $.param() で手動エンコードする場合
var params = $.param({ page: 2, limit: 20 });
console.log(params); // 'page=2&limit=20'
$.get('/api/users?' + params, function (data) {
  console.log(data);
});

JSONデータを取得する($.getJSON)

$.getJSON()$.get() の shorthand で、レスポンスを自動的にJSONとしてパースします。詳しくはJSONデータを取得する方法も参照してください。

// レスポンスを自動でJSONパース
$.getJSON('/api/config', function (data) {
  console.log('設定データ:', data);
  console.log('テーマ色:', data.themeColor);
});

// $.ajax() で同等の処理
$.ajax({
  url:      '/api/config',
  type:     'GET',
  dataType: 'json'
})
  .done(function (data) {
    console.log(data);
  });

キャッシュを制御する

GETリクエストはブラウザにキャッシュされます。常に最新データを取得したい場合はキャッシュを無効化してください。

// キャッシュを無効化(タイムスタンプを付加)
$.ajax({
  url:   '/api/latest-news',
  type:  'GET',
  cache: false  // → ?_=1234567890 のようなパラメーターが自動付加される
})
  .done(function (data) {
    console.log('最新ニュース:', data);
  });

// 全AjaxでキャッシュをOFFにする(グローバル設定)
$.ajaxSetup({ cache: false });
本番環境でのキャッシュ無効化に注意
キャッシュを無効化すると毎回サーバーへリクエストが飛ぶため、サーバー負荷が増加します。静的なデータはキャッシュを活用し、リアルタイム性が必要なデータだけ無効化するよう設計してください。

ローディング状態の表示

$(function () {
  function loadData() {
    // ローディング表示
    $('#loading').show();
    $('#content').empty();

    $.get('/api/articles')
      .done(function (data) {
        // データを描画
        $.each(data, function (i, article) {
          var $li = $('<li>').text(article.title);
          $('#content').append($li);
        });
      })
      .fail(function () {
        $('#content').html('<p class="error">データの取得に失敗しました</p>');
      })
      .always(function () {
        $('#loading').hide(); // 成功・失敗どちらでも非表示
      });
  }

  $('#reload-btn').on('click', loadData);
  loadData(); // 初回読み込み
});

$.get() / $.getJSON() / fetch() の使い分け

方法 特徴 推奨場面
$.get() シンプル・jQueryが必要 テキスト/HTMLの取得
$.getJSON() 自動JSONパース・jQueryが必要 JSON APIの取得(jQuery使用時)
$.ajax() 細かい設定・jQueryが必要 カスタムヘッダー・キャッシュ制御が必要な場合
fetch() 標準API・jQuery不要・async/await対応 新規プロジェクト・モダンJS環境

まとめ

jQueryでGETリクエストを送信する際のポイントをまとめます。

  • 基本: $.get(url, data).done()/.fail()/.always()
  • パラメーター: オブジェクトで渡すと自動URLエンコード
  • JSON取得: $.getJSON() で自動パース
  • キャッシュ無効化: $.ajax({ cache: false })
  • ローディング: .always() で必ず非表示処理

関連記事: POSTリクエストを送信する方法 / JSONデータを取得する方法 / 検索サジェスト機能の完全ガイド

よくある質問(FAQ)

QGETリクエストのURLに日本語を含めたいです。
AjQueryにデータをオブジェクトで渡すと自動でURLエンコードされます。手動で付加する場合は encodeURIComponent("山田") でエンコードしてください。デコードは decodeURIComponent() で行います。
QGETリクエストで送れるデータ量に制限はありますか?
AURLの長さはブラウザやサーバーによって制限があります(通常2,000〜8,000文字程度)。IEは2,048文字、ChromeやFirefoxは数万文字まで対応しています。大量のデータを送信する場合や機密情報を扱う場合はPOSTを使ってください。
QGETリクエストをキャンセルしたいです。
A$.get() は jqXHR オブジェクトを返します。var jqXHR = $.get(...); jqXHR.abort(); でリクエストをキャンセルできます。サジェスト等で入力のたびにリクエストする場合、前のリクエストを abort() して新しいリクエストを送る実装が有効です。
Qfetch() とどちらを使えばよいですか?
AjQueryを使っているプロジェクトでは $.get() / $.getJSON() が統一感を保てます。新規プロジェクトやjQueryを使わない環境では fetch() + async/await が現代の標準です。fetch()はjQueryなしで動作し、async/awaitで同期的に書けるため可読性が高いです。
Q複数のGETリクエストを並列実行したいです。
A$.when() で複数のAjaxを並列実行し、全て完了してから処理できます:$.when($.get("/api/a"), $.get("/api/b")).done(function(a, b) { ... })fetch()を使う場合は Promise.all([fetch("/api/a"), fetch("/api/b")]) が同等です。