我正在尝试使用 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");
但控制台上没有显示任何内容。
答案 0 :(得分: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);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;