カテゴリ:
jQuery

別のjsファイルをロードする

JavaScriptで他のjsファイルを読み込むにはどうすれば良いだろうか。jQueryの$.getScriptメソッドを使えば、簡単に他のjsファイルを読み込むことができる。

注意しなければならないのは、$.getScriptメソッドによるjsファイルの取得は非同期で行われるため、必ずしもそのメソッドから戻った時に対象のjsファイルは有効ではないということだ。通常はDeferredオブジェクト(この場合$.getScriptから返されるjqXHR)のdoneコールバック内で、対象jsファイルに含まれる変数、または関数等を使うことになるだろう。

        // 非同期でスクリプトをロード
        $.getScript('./varandfunc.js')
        .done(function() {
          console.log('x = ' + x + ' y = ' + square(3));
        });

上記のコードでロードするvarandfunc.jsは以下のような単純なものだ。

var x = 100;
function square(n) {
  return n * n;
}

尚、$.getScriptメソッドでロードするjsファイルはキャッシュされない。jsファイルをキャッシュしたい場合、$.ajaxSetupメソッドでajax周りのグローバル設定を変更する。

        $.ajaxSetup({cache: true});

jQuery 1.8以降推奨されていないが、$.ajaxメソッドにasync: falseを渡して、同期的にjsファイルを読み込むことも可能だ。これだと$.ajaxメソッドから戻った時には、既にjsファイルは読み込まれている。また、$.ajaxメソッドならばキャッシュの指定も同時に行うことができる。

        // 同期でスクリプトをロード
        $.ajax({url: './varandfunc.js', dataType: 'script', async: false, cache: true});
        console.log('x = ' + x + ' y = ' + square(3));

実際、Chromeからも以下のような文句を言われてしまう。「メインスレッドでの同期XMLHttpRequestは、ユーザエクスペリエンスに悪影響を及ぼすから推奨されないよ。」と言っているようだ。

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
(2015/02/04)

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright© 2004-2018 モバイル開発系(K) All rights reserved.
[Home]