ReferenceError:从jQuery加载时未定义ko

时间:2014-10-19 10:54:49

标签: javascript jquery knockout.js

我正在尝试使用 jQuery getScript函数加载 KnockoutJS ,经过无数次测试后,我'我仍然坚持

  

ReferenceError:未定义ko

错误。

这是一个简单的代码,我在我的脚本中运行以测试一切是否正常(我还尝试将此代码直接写入 FireBug 但我得到了相同的结果):

$.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);
});

检查控制台会显示以下消息:

  

未定义

     

成功

     

对象{readyState = 4,status = 200,statusText ="成功",其他元素......}

     

ReferenceError:未定义ko

而且我不知道发生了什么。

作为旁注,我也尝试过那些结果相同的网址

编辑:

基于@ 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 个答案:

答案 0 :(得分:1)

getScript使用XHR(ajax),由Same Origin Policy控制。因此,您无法从其他来源加载脚本,除非它们通过CORS启用您的来源。

相反,只需添加引用您要加载的脚本的script标记。

&#13;
&#13;
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);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;