2014-10-19 30 views
0
加載時沒有定義KO

我試圖使用jQuery的getScript函數加載KnockoutJS和,經過無數的測試,我仍然堅持與的ReferenceError:從jQuery的

ReferenceError: ko is not defined

錯誤。

下面是我在我的腳本運行測試,如果一切正常,一個簡單的代碼(我也試過這個代碼直接寫到螢火,但我得到了相同的結果):

$.getScript('http://knockoutjs.com/downloads/knockout-3.2.0.js', 
    function(d,s,j){ 
     console.log(d); 
     console.log(s); 
     console.log(j); 
     console.log(ko); 
}); 

檢查控制檯顯示這些消息:

undefined

success

Object { readyState=4, status=200, statusText="success", other elements...}

ReferenceError: ko is not defined

我不知道發生了什麼事情。

作爲一個方面說明,我也嘗試過這些URL具有相同的結果

編輯:基於@ T.J

。克勞德的第一個答案我也試過這個代碼

$("<script>") 
.on("load", function() { 
    // It's loaded now 
    console.log("success"); 
}) 
.on("error", function() { 
    // It failed to load 
    console.log("error"); 
}) 
.attr("src", "http://knockoutjs.com/downloads/knockout-3.2.0.js"); 

但是在控制檯上什麼也沒有顯示。

回答

1

getScript使用XHR(ajax),其由Same Origin Policy控制。因此,除非他們通過CORS啓用您的來源,否則無法加載其他來源的腳本。

相反,只需添加一個script標記來引用您想要加載的腳本。

var scr = document.createElement('script'); 
 
scr.onload = function() { 
 
    display("Loaded: " + typeof ko); 
 
}; 
 
scr.onerror = function() { 
 
    display("Error"); 
 
}; 
 
scr.src = "http://knockoutjs.com/downloads/knockout-3.2.0.js"; 
 
document.querySelector("script").parentNode.appendChild(scr); 
 

 
function display(msg) { 
 
    $("<p>").html(String(msg)).appendTo(document.body); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

我同時裝入*引導*和* BootstrapSwitch *與此代碼和我沒有任何問題,但我會嘗試你的代碼,看看會發生什麼 – StepTNT 2014-10-19 10:59:13

+0

@StepTNT:全部這意味着他們的CDN可以讓你做到這一點。查看鏈接。 – 2014-10-19 11:02:41

+0

剛剛嘗試了您通過輕微編輯刪除的代碼並將其添加到問題中。 – StepTNT 2014-10-19 11:03:59

相關問題