加载一个JavaScript文件,加载时没有设置变量

加载一个JavaScript文件,加载时没有设置变量

问题描述:

帖子标题可能没有完全解释,但这里是我希望做的:我在一个单独的文件中有我的JavaScript代码,并且我已经安排它如此编排加载一个JavaScript文件,加载时没有设置变量

var PK = { 
    "vars" : { 
     "uris" : { 
      "app1": "http://this/server/", 
      "app2": "http://that/server/" 
     }, 

     "something": { 
      "objects": [], 
      "obj1": { "url": PK.vars.uris.app1 }, 
      "obj2": { "url": PK.vars.uris.app2 }         
     } 
    }, 

    "methods" : { 
     "doThis" : function(a) { 
      $.ajax({ 
       url: PK.vars.uris.app1, 
       data: data, 
       type: "GET", 
       success: function(data) { .. do something .. } 
      });  
     }, 

     "doThat" : function(a) { 
      $.ajax({ 
       url: PK.vars.uris.app2, 
       data: data, 
       type: "GET", 
       success: function(data) { .. do something else .. } 
      });  
     }, 

     "init" : function(position) { 
      if (position) { PK.methods.doThis(); 
      } 
      else { 
       PK.methods.doThat(); 
      } 
     } 
    } 
}; 

,然后在我的html,我有以下

$(document).ready(function() { 
    PK.vars.uris.app1 = "[% app1 %]"; 
    PK.vars.uris.app2 = "[% app2 %]"; 
    PK.methods.init(); 
}); 

其中app1app2值是基于配置文件服务器发送。除此之外,它无法按预期工作,因为当单独的JavaScript加载时,PK.vars.uris当时没有定义。当然,如果我有PK.vars.uris {}硬编码,一切都很好。

如何才能延迟评估var PK,直到文档已加载并且PK.vars.uris可用于JavaScript代码?

+0

不知道我理解 - 但你只是第一次加载单独的文件? –

+0

嗯...我希望我没有搞错解释看起来很简单的情况。我的'external.js'具有定义的'var PK = {}'。它通过脚本标签加载到主html文件中。在同一个html文件中,'PK.vars.uris'的值被初始化为'$(document).ready(function()'。我想确保初始化的值可用于'external'中的'var PK'。 js' – punkish

是否需要将值传递给初始化程序?

这个怎么样的方法:

在你的外部文件:

function PK_Constructor(app1Uri, app2Uri) { 
     this.vars = { "uris" : { 
        "app1" : app1Uri, 
        "app2" : app2Uri 
      }, 
       "something": { 
        "objects": [], 
        "obj1": { "url": app1Uri }, 
        "obj2": { "url": app1Uri }         
       }, 
      }; 
     this.doThis = function(a) { 
      $.ajax({ 
       url: this.vars.uris.app1, 
       data: data, 
       type: "GET", 
       success: function(data) { .. do something .. } 
      }); 
     // etc 

    } 

而且在你的HTML:

// Ensuring PK has global scope 
    var PK = undefined; 

    $(document).ready(function() { 
     PK = new PK_Constructor("[% app1 %]", "[% app2 %]"); 
    }); 
+0

是的,那是行得通的,非常感谢。当然,现在我必须弄清楚如何修改这个模式,这样我就可以将其他几个配置参数传递给初始化器,但至少它给了我一些继续。再次感谢。 – punkish