加载一个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();
});
其中app1
和app2
值是基于配置文件服务器发送。除此之外,它无法按预期工作,因为当单独的JavaScript加载时,PK.vars.uris当时没有定义。当然,如果我有PK.vars.uris {}硬编码,一切都很好。
如何才能延迟评估var PK
,直到文档已加载并且PK.vars.uris
可用于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 %]");
});
+0
是的,那是行得通的,非常感谢。当然,现在我必须弄清楚如何修改这个模式,这样我就可以将其他几个配置参数传递给初始化器,但至少它给了我一些继续。再次感谢。 – punkish
不知道我理解 - 但你只是第一次加载单独的文件? –
嗯...我希望我没有搞错解释看起来很简单的情况。我的'external.js'具有定义的'var PK = {}'。它通过脚本标签加载到主html文件中。在同一个html文件中,'PK.vars.uris'的值被初始化为'$(document).ready(function()'。我想确保初始化的值可用于'external'中的'var PK'。 js' – punkish