我正在使用此答案,ever popular SO post动态加载javascript文件:
$.getScript("scripts/datagrid.js", function(){
alert("Script loaded but not necessarily executed.");
});
但它永远不会加载。在调用此脚本加载函数的js文件标题之前的基础HTML文件中引用了JQuery。此外,在加载文档之前,我不会调用此脚本加载器:
$(document).ready(function() {
administration.init();
});
var administration = {
...
init : function() {
try {
$.getScript("scripts/datagrid.js", function(){
alert("Script loaded but not necessarily executed.");
});
} catch (e) {
alert('[administration.init] error = ' + e);
}
...
我已经通过检查使用JQuery在HTML中硬编码的元素的值来验证已经加载了JQuery。这也是由脚本执行的事实验证的。
如果我将脚本文件添加到HTML标题中,脚本文件就存在并且有效,但我想动态加载它。
为什么匿名函数永远不会触发(显然是因为脚本永远不会加载 - 为什么)?
修改
按照下面的Sanjay的建议,我将错误处理程序绑定到ajax调用,控制台现在显示以下内容:
TypeError: Cannot read property 'init' of undefined(…)
所以它找到了文件,显然无法找到该类的init函数。
答案 0 :(得分:1)
你应该尝试像
一样加载script
$.getScript( "ajax/test.js" )
.done(function( script, textStatus ) {
console.log( textStatus );
})
.fail(function( jqxhr, settings, exception ) {
console.log( exception ); // here you can get reason why file is not loading
});
您可以在此处查看控制台错误Not Found
jsfiddl
答案 1 :(得分:1)
使用如下序列更改代码:(删除try / hide并使用事件处理程序对其进行调试)在声明之后调用它。
if(!jQuery){alert("No jQuery loaded")}
var administration = {
init : function() {
$.getScript( "scripts/datagrid.js" )
.done(function( script, textStatus ) {
console.log( textStatus );
})
.fail(function( jqxhr, settings, exception ) {
alert("exception:"+ exception );
});
}
};
$(document).ready(function() {
administration.init();
});