加载加载时未设置变量的JavaScript文件

加载加载时未设置变量的JavaScript文件,javascript,Javascript,这篇文章的标题可能无法完全解释,但我希望这样做:我将JavaScript代码放在一个单独的文件中,并按照这样的方式进行排列 var PK = { "vars" : { "uris" : { "app1": "http://this/server/", "app2": "http://that/server/" }, "something": { "objects":

这篇文章的标题可能无法完全解释,但我希望这样做:我将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();
});
其中,根据配置文件从服务器发送
app1
app2
的值。除此之外,它没有按预期工作,因为在加载单独的JavaScript时,当时没有定义PK.vars.uri。当然,如果我对PK.vars.uri{}进行了硬编码,那么一切都运行得很好


如何将
var PK
的计算延迟到文档已加载且
PK.vars.uri
可用于JavaScript代码之后?

问题在于您需要将值传递到初始化器中

这种方法如何:

在外部文件中:

  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 %]");
   });

不确定我是否理解-但是你能先加载单独的文件吗?嗯。。。我希望我在解释看似简单的情况时没有弄错。My
external.js
具有中定义的
var PK={}
。通过脚本标记加载到主html文件中。在同一html文件中,
PK.vars.uris
的值被初始化
$(document).ready(function()
。我想确保
external.js
中的
var PK
可以使用初始化值。是的,非常感谢。当然,现在我必须弄清楚如何修改此模式,以便将其他几个配置参数传递给初始值设定项。但是,至少它给了我一些可以继续的东西。再次感谢。