簡體   English   中英

在jQuery中使用Javascript Loader“未定義”

[英]Using a Javascript Loader with jQuery “undefined”

我正在使用Javascript Loader [requireJS]來加載與內容並行的腳本-但是,我遇到了問題。

require('http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js');

通常-作為“備份”-我用過

<script type="text/javascript">
  if (typeof jQuery == 'undefined') {
    document.write(unescape("%3Cscript src='/scripts/jquery-1.4.4.min.js' type='text/javascript'%3E%3C/script%3E"));
  }
</script>

但是,當使用Java腳本加載器時-由於JS和內容是並行加載的,因此這將始終使jQuery“未定義”。

效果基本上是您正在加載jQuery 2x-即通過JavaScript加載程序加載1x,通過“ jquery == undefined”加載1。

我如何使“備份”與javascript加載器一起工作?

據我所知, requirejs通常是這樣使用的:

require(['http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'],
    function() {
        // Code that depends on jQuery here.
    }
);

僅當加載jQuery時,才會調用依賴jQuery的函數。 但是,如果jQuery無法加載,則依賴於它的代碼將永遠不會執行。

由於您想在這種情況下嘗試使用本地jQuery,因此您可能應該捕獲腳本加載超時錯誤並嘗試從其他來源加載jQuery。 (但是請注意,超時錯誤很慢。)

docs中有關錯誤處理的信息很少:

要檢測錯誤,可以重寫require.onError()以獲取錯誤。 如果是超時問題,傳遞給onerror函數的錯誤對象將包含兩個屬性:

  • requireType :值將為“超時”
  • requireModules :超時的模塊名稱/ URL的數組。

我認為,代碼可能看起來像這樣(未經測試):

var functionThatDependsOnJquery = function() {
    // Code that depends on jQuery here.
};

require.onError = function(err) {
    # If we have Google jQuery load timeout...
    if (err.requireType = "timeout" &&
        err.requireModules.indexOf('http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js') != -1
        ) {
        # ...we'll try to load it from another source.
        require(['/scripts/localJquery'], functionThatDependsOnJquery);
    }
    # We have another script load timeout, so we just throw an error
    # as requirejs normally does.
    else { throw err; }
};

# Try to load Google jQuery.
require(['http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'],
    functionThatDependsOnJquery);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM