JQuery $ .getScript () yöntemi kullanılarak birden çok js dosyası nasıl eklenir


127

Javascript dosyalarını js dosyama dinamik olarak eklemeye çalışıyorum. Bununla ilgili biraz araştırma yaptım ve jQuery $ .getScript () yönteminin gitmek için istenen bir yol olduğunu buldum.

// jQuery
$.getScript('/path/to/imported/script.js', function()
{
    // script is now loaded and executed.
    // put your dependent JS here.
    // what if the JS code is dependent on multiple JS files? 
});

Ancak bu yöntemin aynı anda birden fazla komut dosyası yükleyip yükleyemeyeceğini merak ediyorum. Bunu neden soruyorum çünkü bazen javascript dosyam birden fazla js dosyasına bağlı.

Şimdiden teşekkür ederim.

Yanıtlar:


315

Cevap

Sözleri ile birlikte kullanabilir getScript()ve tüm komut dosyaları yüklenene kadar bekleyebilirsiniz, örneğin:

$.when(
    $.getScript( "/mypath/myscript1.js" ),
    $.getScript( "/mypath/myscript2.js" ),
    $.getScript( "/mypath/myscript3.js" ),
    $.Deferred(function( deferred ){
        $( deferred.resolve );
    })
).done(function(){
    
    //place your code here, the scripts are all loaded
    
});

VAKTİNİ BOŞA HARCAMAK

bAŞKA FIDDLE

Yukarıdaki kodda, bir Ertelenmiş eklemek ve içinde çözmek $(), bir jQuery çağrısının içine başka herhangi bir işlevi yerleştirmek gibidir $(func), örneğin ,

$(function() { func(); });

Yani, DOM'un hazır olmasını bekler, bu nedenle yukarıdaki örnekte $.when, tüm komut dosyalarının yüklenmesini ve$.Deferred DOM hazır geri aramasında çözülen çağrı nedeniyle DOM'un hazır olmasını bekler .


Daha genel kullanım için kullanışlı bir işlev

Herhangi bir komut dizisi dizisini kabul eden bir yardımcı program işlevi şu şekilde oluşturulabilir:

$.getMultiScripts = function(arr, path) {
    var _arr = $.map(arr, function(scr) {
        return $.getScript( (path||"") + scr );
    });
        
    _arr.push($.Deferred(function( deferred ){
        $( deferred.resolve );
    }));
        
    return $.when.apply($, _arr);
}

bunun gibi kullanılabilir

var script_arr = [
    'myscript1.js', 
    'myscript2.js', 
    'myscript3.js'
];

$.getMultiScripts(script_arr, '/mypath/').done(function() {
    // all scripts loaded
});

burada yol tüm komut dosyalarının başına eklenir ve ayrıca isteğe bağlıdır, yani dizi tam URL'leri içeriyorsa, bir de bunu yapabilir ve yolu bir arada bırakabilir

$.getMultiScripts(script_arr).done(function() { ...

Bağımsız değişkenler, hatalar vb.

Bir kenara, donegeri aramanın, komut dosyalarında iletilenlerle eşleşen bir dizi bağımsız değişken içereceğini unutmayın; her bağımsız değişken yanıtı içeren bir diziyi temsil eder

$.getMultiScripts(script_arr).done(function(response1, response2, response3) { ...

burada her dizi gibi bir şey olacaktır [content_of_file_loaded, status, xhr_object]. Komut dosyaları yine de otomatik olarak yükleneceği için genellikle bu argümanlara erişmemize gerek yoktur ve çoğu zaman donetüm komut dosyalarının yüklendiğini bilmek için gerçekten peşinde olduğumuz tek şey geri aramadır, sadece tamlık için ekliyorum ve yüklenen dosyadaki gerçek metne erişilmesi gerektiğinde veya her XHR nesnesine veya benzer bir şeye erişilmesi gerektiğinde nadir durumlarda.

Ayrıca, komut dosyalarından herhangi biri yüklenemezse, hata işleyici çağrılacak ve sonraki komut dosyaları yüklenmeyecektir.

$.getMultiScripts(script_arr).done(function() {
     // all done
}).fail(function(error) {
     // one or more scripts failed to load
}).always(function() {
     // always called, both on success and error
});

11
Harika cevap için teşekkürler. Neden $.Deferred(function( deferred ){$( deferred.resolve );})buraya eklediğini bana açıklar mısın ?
sozhen

11
Ertelenmiş nesnenin, birden çok komut dosyası yüklemenize ve hepsi tamamlandığında bir işlevi gerçekleştirmenize olanak tanıyan sözle gerçekten hiçbir ilgisi yoktur. Sadece $ () hazır olup olmadığını kontrol eder ve hazır olup olmadığını kontrol eder, başka bir deyişle, herhangi bir kodu çalıştırmadan önce DOM'un hazır olup olmadığını kontrol eder, tıpkı document.ready would gibi, ve ben eklemek için iyi bir örnek buldum Kodda ertelenmiş DOM hazır işlevselliğine sahip olan ve iyi bir fikir gibi göründüğü için onu korumaya karar veren çevrimiçi getScript vaat ediyor.
adeneo

4
Bunun nedeni, ajax'ta önbelleğe alma, jQuery'de varsayılan olarak kapalı olmasıdır, sorgu dizesini açmak ve kaldırmak için yapın: $.ajaxSetup({ cache: true });ancak bu, önbelleğe almak istemediğiniz diğer ajax çağrılarını da etkileyebilir, bununla ilgili daha pek çok şey var . getScript ve hatta cachedScript adı verilen önbelleğe alınmış bir getScript işlevi oluşturmak için küçük bir yöntem var.
adeneo

3
Geç kabul ettiğim için özür dilerim. Bazen yolunuz hala pek işe yaramıyor. Sebebinin ne olduğundan emin değilim. Aynı anda dört komut dosyasını birleştirmeye çalışıyorum. $.when($.getScript(scriptSrc_1), $.getScript(scriptSrc_2), $.getScript(scriptSrc_3), $.getScript(scriptSrc_4), $.Deferred(function(deferred) { $(deferred.resolve); })).done(function() { ... })
sozhen

1
Bunu çalıştıramayan herkes için, JS dosyalarınızda ayrıştırma hatası olmadığından emin olun, yani önce bir <script> etiketine düzgün şekilde yüklendiklerini test edin. jQuery.getScript () bu hataları başarısız bir yükleme olarak kabul edecek ve .done () yerine .fail () çağrılacaktır. @SongtaoZ.
ay prizma gücü

29

Birden çok komut dosyasını paralel olarak yüklemek için basit bir işlev uyguladım:

fonksiyon

function getScripts(scripts, callback) {
    var progress = 0;
    scripts.forEach(function(script) { 
        $.getScript(script, function () {
            if (++progress == scripts.length) callback();
        }); 
    });
}

kullanım

getScripts(["script1.js", "script2.js"], function () {
    // do something...
});

1
Nedense bu, Emanuel'inkinden daha iyi çalıştı. Bu da çok şeffaf bir uygulama.
Todd

@satnam teşekkürler :)! top cevap bazı insanlar için çalışmıyor (ben dahil) bu yüzden bu çözümü gönderdim. Ve çok daha basit görünüyor.
Andrei

10

Aşağıdaki gerekli komut dosyasını bir öncekinin geri aramasına yükleyin:

$.getScript('scripta.js', function()
{
   $.getScript('scriptb.js', function()
   {
       // run script that depends on scripta.js and scriptb.js
   });
});

1
Elbette bu yöntem komut dosyalarını sırayla indirecek ve son çalıştırma süresini yavaşlatacak mı?
Jimbo

1
Doğru, @Jimbo - adil olmak gerekirse; erken infaza tercih edilir. :)
Alastair

Şelalelerden neredeyse her zaman kaçınılmalıdır. getScript bir sözle gelir ... Sözler çözüldüğünde dinlemek için $ .when kullanabilirsiniz.
Roi

@Roi ve diğerleri: Betiklerin BELİRLİ BİR SİPARİŞ içinde yüklenmesine İHTİYACIM VARSA, temelde bu yaklaşımda yanlış olan nedir? Ve bu nedenle, vaat edilen alternatif ne gibi bir avantaj sağlar?
Ifedi Okonkwo

@IfediOkonkwo bu, seri halinde olmaları gerektiğinde işe yarıyor, ancak ilk operasyon, aynı anda katları istediğinden bahsetti (ki bu bir anti-model olurdu). O zaman bile, onları seri halinde isteseydim, bir diziyi geçirebileceğim bir döngü işlevi yazardım. Derin yuvalama hızla dağınık hale gelir.
Roi

9

Bazen komut dosyalarını belirli bir sırayla yüklemek gerekir. Örneğin jQuery, jQuery UI'den önce yüklenmelidir. Bu sayfadaki çoğu örnek, komut dosyalarını paralel olarak (eşzamansız olarak) yükler; bu, yürütme sırasının garanti edilmediği anlamına gelir. Sıralama olmadan, ybağlı olan komut dosyası , xher ikisi de başarıyla yüklenirse ancak yanlış sırada kesilebilir.

Bağımlı komut dosyalarının sıralı yüklenmesine + isteğe bağlı paralel yüklemeye + ertelenmiş nesnelerin yüklenmesine izin veren karma bir yaklaşım öneriyorum :

/*
 * loads scripts one-by-one using recursion
 * returns jQuery.Deferred
 */
function loadScripts(scripts) {
  var deferred = jQuery.Deferred();

  function loadScript(i) {
    if (i < scripts.length) {
      jQuery.ajax({
        url: scripts[i],
        dataType: "script",
        cache: true,
        success: function() {
          loadScript(i + 1);
        }
      });
    } else {
      deferred.resolve();
    }
  }
  loadScript(0);

  return deferred;
}

/*
 * example using serial and parallel download together
 */

// queue #1 - jquery ui and jquery ui i18n files
var d1 = loadScripts([
  "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js",
  "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/i18n/jquery-ui-i18n.min.js"
]).done(function() {
  jQuery("#datepicker1").datepicker(jQuery.datepicker.regional.fr);
});

// queue #2 - jquery cycle2 plugin and tile effect plugin
var d2 = loadScripts([
  "https://cdn.rawgit.com/malsup/cycle2/2.1.6/build/jquery.cycle2.min.js",
  "https://cdn.rawgit.com/malsup/cycle2/2.1.6/build/plugin/jquery.cycle2.tile.min.js"

]).done(function() {
  jQuery("#slideshow1").cycle({
    fx: "tileBlind",
    log: false
  });
});

// trigger a callback when all queues are complete
jQuery.when(d1, d2).done(function() {
  console.log("All scripts loaded");
});
@import url("https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/blitzer/jquery-ui.min.css");

#slideshow1 {
  position: relative;
  z-index: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<p><input id="datepicker1"></p>

<div id="slideshow1">
  <img src="https://dummyimage.com/300x100/FC0/000">
  <img src="https://dummyimage.com/300x100/0CF/000">
  <img src="https://dummyimage.com/300x100/CF0/000">
</div>

Her iki kuyruktaki komut dosyaları paralel olarak indirilir, ancak her kuyruktaki komut dosyaları sırayla indirilerek sıralı yürütülmesini sağlar. Şelale grafiği:

şelale şeması


Komut dosyası belleğe yüklendikten sonra kod etiketini HTML'ye eklememiz gerekmez mi?
Ankush Jain

4

Yepnope.js veya Modernizr kullanın (yepnope.js de içerir Modernizr.load).

GÜNCELLEME

Takip etmek için, şu anda yepnope kullandığınızın iyi bir eşdeğeri, birden çok komut dosyasına olan bağımlılıkları gösteriyor:

yepnope({
  load: ['script1.js', 'script2.js', 'script3.js'],
  complete: function () {
      // all the scripts have loaded, do whatever you want here
  }
});

Teşekkürler. Birden çok yepnope.injectJs( scriptSource )javascript dosyamın başında <script>html dosyasındaki etiketler gibi kullanabilir miyim ?
sozhen

Bu yeni ve dürüst olmak gerekirse, neden gerekli olduğunu anlamıyorum. Son değişiklikler listesinin biraz ilerisindeki belgeleri takip edin ve daha geleneksel kullanımı göreceksiniz.
Chris Pratt

+ 1; bunun bağımlılıkları düzgün bir şekilde yönettiğini (yani aynı betiği iki kez yüklemeyeceğini) belirtmek gerekir $.getScript. Bu büyük bir mesele.
ov

yepnope.js artık kullanımdan kaldırılmıştır .
Stephan

4

Çoklu komut dosyası yüklemesiyle ilgili bir dizi sorunla karşılaştım (en azından Chrome'da), Ajax tarafından başarıyla yüklendikten sonra gerçekten çalışmayan komut dosyalarının aynı alan adı sıcak yüklemesiyle ilgili bir sorunla karşılaştım; burada Cross Domain mükemmel çalışıyor! :(

Orijinal soruya seçilen cevap güvenilir şekilde çalışmıyor.

Buradaki birçok yinelemeden sonra, getScript (ler) e ve eşzamansız olarak birden çok komut dosyasını komut dosyası başına yüklenen geri arama seçeneği ve tamamlandığında genel geri arama ile belirli bir katı sırayla yüklemek için son cevabımdır, jQuery 2.1+ ve Chrome'un modern sürümlerinde test edilmiştir, Firefox ve terk edilmiş Internet Explorer.

Benim test durumum bir THREE.JS webGL renderlemesi için dosyaları yüklüyordu ve onComplete'e anonim bir fonksiyon çağrısına geçirilen bir aralık kontrolü kullanılarak THREE global kullanılabilir hale geldiğinde render betiğini başlatıyordu.

Prototip işlevi (getScripts)

function getScripts( scripts, onScript, onComplete )
{
    this.async = true;
    this.cache = false;
    this.data = null;
    this.complete = function () { $.scriptHandler.loaded(); };
    this.scripts = scripts;
    this.onScript = onScript;
    this.onComplete = onComplete;
    this.total = scripts.length;
    this.progress = 0;
};

getScripts.prototype.fetch = function() {
    $.scriptHandler = this;
    var src = this.scripts[ this.progress ];
    console.log('%cFetching %s','color:#ffbc2e;', src);

    $.ajax({
        crossDomain:true,
        async:this.async,
        cache:this.cache,
        type:'GET',
        url: src,
        data:this.data,
        statusCode: {
            200: this.complete
        },
        dataType:'script'
    });
};

getScripts.prototype.loaded = function () {
    this.progress++;
    if( this.progress >= this.total ) {
        if(this.onComplete) this.onComplete();
    } else {
        this.fetch();
    };
    if(this.onScript) this.onScript();
};

Nasıl kullanılır

var scripts = new getScripts(
    ['script1.js','script2.js','script.js'],
    function() {
        /* Optional - Executed each time a script has loaded (Use for Progress updates?) */
    },
    function () {
        /* Optional - Executed when the entire list of scripts has been loaded */
    }
);
scripts.fetch();

İşlev, benim denemelerimde Ertelenmiş (Şimdi Kullanımdan Kaldırıldı?), Ne Zaman, Başarı ve Tamamlama% 100 güvenilir OLMAYACAK!

İsterseniz hata / başarısızlık işleme davranışı eklemek isteyebilirsiniz.


Bunları doğru sırada yüklemek için +1, genellikle gerekli ve bir şeyi kaçırmadığım sürece kabul edilen cevabın garanti etmeyeceği bir şey? Aşağıda benzer daha kısa bir cevap gönderdim ama bu daha genel bir durum.
Whelkaholism

2

Sen yararlanabilecek $.whenşu işlevini deneyerek kullanılan yöntem:

function loadScripts(scripts) {
  scripts.forEach(function (item, i) {
    item = $.getScript(item);
  });
  return $.when.apply($, scripts);
}

Bu işlev şu şekilde kullanılacaktır:

loadScripts(['path/to/script-a.js', 'path/to/script-b.js']).done(function (respA, respB) {
    // both scripts are loaded; do something funny
});

Promises'i kullanmanın ve minimum ek yüke sahip olmanın yolu budur.


Bu, komut dosyalarının sırayla yüklenmesini sağlıyor mu?
CyberMonk

2

Harika cevap, adeneo.

Cevabınızı nasıl daha genel hale getireceğimi bulmam biraz zaman aldı (böylece bir dizi kod tanımlı komut dosyası yükleyebildim). Geri arama, tüm komut dosyaları yüklendiğinde ve çalıştırıldığında çağrılır. İşte benim çözümüm:

    function loadMultipleScripts(scripts, callback){
        var array = [];

        scripts.forEach(function(script){
            array.push($.getScript( script ))
        });

        array.push($.Deferred(function( deferred ){
                    $( deferred.resolve );
                }));

        $.when.apply($, array).done(function(){
                if (callback){
                    callback();
                }
            });
    }

2

Async = false ile komut dosyaları ekleyin

İşte farklı ama süper basit bir yaklaşım. Birden çok komut dosyasını yüklemek için bunları gövdeye ekleyebilirsiniz.

  • Bunları eşzamansız olarak yükler, çünkü tarayıcılar sayfa yüklemeyi bu şekilde optimize eder
  • Komut dosyalarını sırayla çalıştırır, çünkü tarayıcılar HTML etiketlerini bu şekilde ayrıştırır
  • Geri aramaya gerek yoktur, çünkü komut dosyaları sırayla yürütülür. Basitçe başka bir komut dosyası ekleyin ve diğer komut dosyalarından sonra çalıştırılacaktır.

Daha fazla bilgi burada: https://www.html5rocks.com/en/tutorials/speed/script-loading/

var scriptsToLoad = [
   "script1.js", 
   "script2.js",
   "script3.js",
]; 
    
scriptsToLoad.forEach(function(src) {
  var script = document.createElement('script');
  script.src = src;
  script.async = false;
  document.body.appendChild(script);
});

1

Aradığınız şey AMD uyumlu bir yükleyicidir (required.js gibi).

http://requirejs.org/

http://requirejs.org/docs/whyamd.html

Bakarsanız, birçok iyi açık kaynak kodlu var. Temel olarak bu, bir kod modülü tanımlamanıza izin verir ve diğer kod modüllerine bağlıysa, çalışmaya devam etmeden önce bu modüllerin indirilmesinin tamamlanmasını bekler. Bu şekilde, 10 modülü eşzamansız olarak yükleyebilirsiniz ve birinin çalışması için diğerlerinden birkaçına bağlı olsa bile herhangi bir sorun olmamalıdır.


1

Bu işlev, bağımlılık dosyası tamamen yüklendikten sonra bir dosyanın yüklenmesini sağlar. Dosyaları diğer dosyalara bağımlılıkları göz önünde bulundurarak sırayla sağlamanız yeterlidir.

function loadFiles(files, fn) {
    if (!files.length) {
        files = [];
    }
    var head = document.head || document.getElementsByTagName('head')[0];

    function loadFile(index) {
        if (files.length > index) {
            var fileref = document.createElement('script');
            fileref.setAttribute("type", "text/javascript");
            fileref.setAttribute("src", files[index]);
            head.appendChild(fileref);
            index = index + 1;
            // Used to call a callback function
            fileref.onload = function () {
                loadFile(index);
            }
        } else if(fn){
            fn();
        }
    }
    loadFile(0);
}

Dosyaları sırayla yüklediği için kabul edilen cevaptan belki de daha iyi. Script2, script1'in yüklenmesini gerektiriyorsa, sıralama önemlidir.
Salman A

1

Bu benim için çalışıyor:

function getScripts(scripts) {
    var prArr = [];
    scripts.forEach(function(script) { 
        (function(script){
            prArr .push(new Promise(function(resolve){
                $.getScript(script, function () {
                    resolve();
                });
            }));
        })(script);
    });
    return Promise.all(prArr, function(){
        return true;
    });
}

Ve onu kullanın:

var jsarr = ['script1.js','script2.js'];
getScripts(jsarr).then(function(){
...
});

1

İşte Maciej Sawicki'nin birini kullanarak ve Promisegeri arama olarak uygulayarak cevap :

function loadScripts(urls, path) {
    return new Promise(function(resolve) {
        urls.forEach(function(src, i) {

            let script = document.createElement('script');        
            script.type = 'text/javascript';
            script.src = (path || "") + src;
            script.async = false;

            // If last script, bind the callback event to resolve
            if(i == urls.length-1) {                    
                // Multiple binding for browser compatibility
                script.onreadystatechange = resolve;
                script.onload = resolve;
            }

            // Fire the loading
            document.body.appendChild(script);
        });
    });
}

kullanın:

let JSDependencies = ["jquery.js",
                      "LibraryNeedingJquery.js",
                      "ParametersNeedingLibrary.js"];

loadScripts(JSDependencies,'JavaScript/').then(taskNeedingParameters);

Tüm Javascript dosyaları mümkün olan en kısa sürede indirilir ve verilen sırayla yürütülür. Sonra taskNeedingParametersdenir.


0

Andrew Marc Newton'un yukarıdaki kapsamlı cevabının kısa versiyonu. Bu, tanımsız UI davranışını önlemek için yapmanız gereken başarı için durum kodunu kontrol etmez.

Bu, jQuery'yi garanti edebildiğim, ancak başka hiçbir şeyi içermeyen sinir bozucu bir sistem içindi, bu yüzden, zorlandığında harici bir komut dosyasına eklenmeyecek kadar kısa bir teknik istedim. (0 indisini ilk "özyinelemeli" çağrıya geçirerek daha da kısaltabilirsiniz, ancak stil alışkanlıklarının gücü şekeri eklememe neden oldu).

Ayrıca bağımlılık listesini bir modül adına atıyorum, bu nedenle bu blok "modül1" e ihtiyacınız olan her yere dahil edilebilir ve komut dosyaları ve bağımlı başlatma yalnızca bir kez dahil edilecek / çalıştırılacaktır ( indexgeri aramada oturum açabilir ve tek bir sıralı görebilirsiniz AJAX istekleri kümesi)

if(typeof(__loaders) == 'undefined') __loaders = {};

if(typeof(__loaders.module1) == 'undefined')
{
    __loaders.module1 = false;

    var dependencies = [];

    dependencies.push('/scripts/loadmefirst.js');
    dependencies.push('/scripts/loadmenext.js');
    dependencies.push('/scripts/loadmelast.js');

    var getScriptChain  = function(chain, index)        
    {
        if(typeof(index) == 'undefined')
            index = 0;

        $.getScript(chain[index], 
            function()
            {
                if(index == chain.length - 1)
                {
                    __loaders.module1 = true;

                    /* !!!
                        Do your initialization of dependent stuff here 
                    !!! */
                }
                else 
                    getScriptChain(chain, index + 1);
            }
        );
    };

    getScriptChain(dependencies);       
}

0

JQuery'nin getScript yöntemini genişleten bir eklenti var. Eşzamansız ve eşzamanlı yüklemeye izin verir ve jQuery'nin önbelleğe alma mekanizmasını kullanır. Tam açıklama, bunu yazdım. Daha iyi bir yöntem bulursanız lütfen katkıda bulunmaktan çekinmeyin.

https://github.com/hudsonfoo/jquery-getscripts


0

Tek tek n komut dosyası yükler (örneğin 2. dosyanın 1. dosyaya ihtiyacı varsa kullanışlıdır):

(function self(a,cb,i){
    i = i || 0; 
    cb = cb || function(){};    
    if(i==a.length)return cb();
    $.getScript(a[i++],self.bind(0,a,cb,i));                    
})(['list','of','script','urls'],function(){console.log('done')});

0

Yukarıdaki @adeneo'nun cevabına göre: Hem css hem de js dosyalarının yüklenmesini birleştirmek

iyileştirme için herhangi bir öneri?

// Usage
//$.getMultiResources(['script-1.js','style-1.css'], 'assets/somePath/')
//  .done(function () {})
//  .fail(function (error) {})
//  .always(function () {});

(function ($) {
  $.getMultiResources = function (arr, pathOptional, cache) {
    cache = (typeof cache === 'undefined') ? true : cache;
    var _arr = $.map(arr, function (src) {
      var srcpath = (pathOptional || '') + src;
      if (/.css$/i.test(srcpath)) {
        return $.ajax({
          type: 'GET',
          url: srcpath,
          dataType: 'text',
          cache: cache,
          success: function () {
            $('<link>', {
              rel: 'stylesheet',
              type: 'text/css',
              'href': srcpath
            }).appendTo('head');
          }
        });

      } else {
        return $.ajax({
          type: 'GET',
          url: srcpath,
          dataType: 'script',
          cache: cache
        });
      }
    });
    //
    _arr.push($.Deferred(function (deferred) {
      $(deferred.resolve);
    }));
    //
    return $.when.apply($, _arr);
  };
})(jQuery);

0

Bunu özyinelemeyi kullanarak deneyebilirsiniz. Bu, tüm listenin indirilmesi tamamlanana kadar onları birbiri ardına senkronize olarak indirecektir.

var queue = ['url/links/go/here'];

ProcessScripts(function() { // All done do what ever you want

}, 0);

function ProcessScripts(cb, index) {
    getScript(queue[index], function() {
        index++;
        if (index === queue.length) { // Reached the end
            cb();
        } else {
            return ProcessScripts(cb, index);
        }
    });
}

function getScript(script, callback) {
    $.getScript(script, function() {
        callback();
    });
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.