2013-10-25 216 views
0

我有一個數組,我已經指定了在調用特定腳本之前需要在JavaScript中加載的文件。讓我們稱這些特定的代碼行爲myscript在js文件中加載JavaScript文件。檢查是否加載所有文件的最佳方法是什麼?

我做了如下

var fileNamesArray = new Array(); 
    fileNamesArray.push("abc.js"); 
    fileNamesArray.push("pqr.js"); 
    fileNamesArray.push("xyz.js"); 
    fileNamesArray.push("klm.js"); 

    var totalFiles = jQuery(fileNamesArray).length; 
    var tempCount = 0; 

    jQuery.each(fileNamesArray, function(key, value) { 
     jQuery.getScript(value, function() { 
      tempCount++; 
     }); 
    }); 

檢查是否正在加載的所有文件或沒有,我做以下的事情,但似乎並不有效

var refreshIntervalId = setInterval(function() { 
     if (tempCount == totalFiles) { 
      clearInterval(refreshIntervalId); 
      return; 
     } 
    }, 10); 

我已經實現了這些面向對象的javascript如下

function Loader() { 

    this.jQuery = null; 

    // check for specifically jQuery 1.8.2+, if not, load it 

    if (jQuery == undefined) { 
     jQuery.getScript(
       "/Common/javascript/jquery/map/javascript/jquery-1.8.2.js", 
       function() { 
        this.jQuery = jQuery.noConflict(); 
       }); 
    } else { 
     var jQueryVersion = $.fn.jquery; 

     jQueryVersion = parseInt(jQueryVersion.split('.').join("")); 

     if (182 > jQueryVersion) { 
      jQuery.getScript(
        "/Common/javascript/jquery/map/javascript/jquery-1.8.2.js", 
        function() { 
         this.jQuery = jQuery.noConflict(); 
        }); 
     } 
    } 
} 

Loader.prototype.LoadAllFile = function() { 
//here i am loading all files 
} 

Loader.prototype.bindMap = function(options) { 
this.LoadAllFile(); 
//execute the script after loading the files... which we called as myscript 
} 

我正在加載超過12-14個js文件v ia ajax。

如果您觀察到Loader.prototype.bindMap,我先加載所有文件,然後執行腳本。

但似乎myscript該腳本在所有文件加載之前開始執行。

只有在加載完所有js文件後才能執行腳本的更好方法是什麼?

+0

你可能會發現你的答案在這裏: http://stackoverflow.com/questions/1293367/how-to-detect-if-javascript-files-are-loaded – brandonscript

+0

聽起來像是你應該考慮一個模塊加載器例如'requirejs'或'curl' – megawac

+0

@ r3mus我無法使用''加載頭部分或主體部分中的文件。只需要加載JS中的所有文件。 – KuKu

回答

0

在jQuery的.load()http://api.jquery.com/load-event/

$('script').load(function() { }); 
+0

從Jquery1.8開始,此方法已棄用。必須使用「開」方法 http://api.jquery.com/on/ – eggward

0

基於Jquery.getScript文檔上看看,它是Jquery.ajax的簡寫。默認情況下,這是在異步調用。您可能想要將其更改爲進行同步呼叫。 要設置這個屬性,你可以參考this

所以,而不是做一個setInterval,你可以循環你的數組,並做一個Jquery.getScript。

相關問題