2011-03-14 38 views
0

我一直在使用這一段腳本到外部.js文件加載到文檔:加載外部.js文件使用jQuery 1.5.1

$.ajax({ 
    url: dir + '/' + module + '.js', 
    dataType: 'script', 
    async: false, 
    success: function() { 
     modules[module].init(); 
    }, 
    error: function(xhr) { 
     alert('Error loading module "' + module + '"'); 
    } 
}); 

但是當我切換到的jQuery 1.5.1(而不是1.4 .2我以前使用過)它停止工作。它加載該文件,但沒有成功 - 文件內容被傳遞的錯誤xhr.responseText

回答

0

您能否使用$阿賈克斯(),而不是「成功」事件中的「完整」事件?


如果您需要動態地加載javascript源文件,你可以在[腳本]標籤附加到[主治]標籤:

$("head").append(
    unescape('%3Cscript src="/path/to/javascript.js"%3E%3C/script%3E'); 
); 

與唯一的問題,就是你必須防止該腳本不止一次被加載。

我喜歡有測試對於我知道被定義在動態加載的JavaScript文件的功能的存在下,如果()的條件。我使用underscore.js和_.isFunction()來測試這個(http://documentcloud.github.com/underscore/#isFunction)。只有當沒有定義的測試功能加載JavaScript文件的src:

if(!(_.isFunction(someTestFunction))) { 
    $("head").append(
    unescape('%3Cscript src="/path/to/javascript.js"%3E%3C/script%3E'); 
); 
} 
+0

我可能做這樣的事情,但真正感興趣的是爲什麼不能在jquery 1.4.2中正常工作的腳本在v1.5.1中工作:) – Allan 2011-03-14 15:22:03

0

爲什麼不使用這樣的事情?

<script type="text/javascript" src="/jquery-1.5.1.js"></script> 
<script type="text/javascript" src="/[name of script].js"></script> 

您只需確保在定義使用它的任何函數之前包含jQuery文件。

+0

這不是我要求的;系統必須能夠動態加載和啓動模塊。 – Allan 2011-03-14 15:08:08

0

從您發佈的東西,好像你的代碼有一定範圍的問題。如果沒有它是幹什麼用的情況下看到它很難說,因爲變量module未在success & error回調定義什麼是錯的,但最有可能。所以我認爲你應該檢查在這兩個回調中是否定義了module

此外,還可以節省的某個時候自己和使用$.getScript代替。

+0

範圍界定? :)它甚至不會觸發「成功」,它直接轉到「錯誤」,所以任何範圍都不應該是這裏的原因。我應該補充一點,它從.jar文件加載腳本..但正如我前面提到的,它在jQuery v1.4.2中運行良好 – Allan 2011-03-14 17:00:12