我正在尝试获取TestService.Server.WWW_SERVER_URL,但TestService.Server未定义。 当我调用test1()时,它运行良好。但我无法访问对象文字TestServer。 有不同的方式吗?
的test.html
<script type="text/javascript" language="javascript" src="TestService.js"></script>
<script type="text/javascript" language="javascript">
function test() {
alert("TestService.Server.WWW_SERVER_URL[" + TestService.Server.WWW_SERVER_URL + "]");
//test1();
}
</script>
TestService.js
document.write("<scr" + "ipt type='text/javascript' src='TestServer.js'><" + "/scr" + "ipt>");
var TestService = {
Server: TestServer,
Delimiter: ""
};
function test1() {
test2();
}
TestServer.js
var TestServer = {
WWW_SERVER_URL: "http://www.test.com"
};
function test2() {
alert("test2 has been called!");
}
答案 0 :(得分:0)
你在TestService.js
中有这个document.write("<scr" + "ipt type='text/javascript' src='TestServer.js'><" + "/scr" + "ipt>");
var TestService = {
Server: TestServer,
Delimiter: ""
};
您正尝试在TestService
中设置一个尚未加载TestServer
的属性,因为您没有为新添加的脚本加载时间
TestService.Server
尚不存在, undefined
将评估为TestServer
设置一个onload函数,它将添加你的脚本,然后在加载
时设置你的TestService.Server变量var TestService = {
Server: null,
Delimiter: ""
};
function test1() {
test2();
}
window.onload = function() {
var head = document.querySelector("head");
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "TestServer.js");
head.addEventListener("load", function(event) {
if (event.target.nodeName === "SCRIPT"){
TestService.Server = TestServer;
}
}, true);
head.appendChild(script);
}
答案 1 :(得分:0)
如果您动态附加脚本,IE,Firefox和Chrome都可以 以异步方式下载脚本。
Firefox和Chrome将等待所有异步请求返回 然后将按照附加的顺序执行脚本 DOM但是IE按照它们的顺序执行脚本 通过电线返回。
在您的情况下,您无法保证TestServer.js
在TestService.js
之前执行。因此,我建议您更改访问全局变量交叉文件的方式。
您可以在TestServer.js
之前将TestService.js
添加到您的html,这样他们就可以逐个执行。
无论如何,不建议做这样的事情,你可以将它们包装在你自己的命名空间中。另外,在使用之前,最好检查一下您要使用的变量是否未定义。