0

$.getScript特定のページに必要なスクリプトをロードする非同期呼び出しに取り組んでいます。AJAX呼び出しを介してスクリプトを取得し、必要なスクリプトを取得してから、関数で順番にロードします。スクリプトが完全にロードされてDOMに配置され、使用できるようになったときではなく、呼び出しがすぐに行われる$.when理由がわかりません。.done()

たとえば、AJAX呼び出しはこれを返します:

['js/jquery.cookie.js', 'js/leaflet.js', 'js/index.js']

このコードで:

var loadScripts = function(callback)
{
    $.getJSON('url.php', function(response)
    {
        $['when'].call(this, response).done(function()
        {
            callback();
        });
    });
};

それを呼び出す:

loadScripts(function()
{
    // All scripts are loaded and ready to use
    // but the callback is fired immediately

    // L is undefined
    var map = L.map('map-view').setView([51.505, -0.09], 13);
});

Head.jsやRequire.jsなどのライブラリを使用したくないので、ロードして、ロードされた関数が使用できるようになるまで待機できる単純なスクリプトが必要です。スクリプトリストは変更される可能性があり、順序も変更される可能性があるため、これ$.when($.getScript(), $.getScript()).done()は私が探しているものではないことに注意してください。

どうすればこれにアプローチできますか?

4

1 に答える 1

1

ajax呼び出しは、遅延オブジェクトではなく、文字列の配列を返します。jQuery.getScriptこれらの文字列を要求して戻り値を格納することにより、これらの文字列を実際に遅延オブジェクトにする必要があります。

var loadScripts = function(callback) {
    $.getJSON('url.php', function(response) {
        var defArr = $.map(response,function(url) {
            return $.getScript(url);
        });
        $.when.apply($, defArr).done(callback);
    });
};​
于 2012-12-06T18:43:36.780 に答える