Javascript文件不会动态加载

时间:2016-03-08 13:37:20

标签: javascript jquery

我正在使用此答案,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函数。

2 个答案:

答案 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();
});