我正在学习javascript,并希望在我的代码中使用同步javascript调用。
例如,我有两个脚本,script1.js和script2.js。这是script1.js:
<script>
var value1="Script 1";
alert(value1);
//calling script2
url="script2.js"
document.write("<scr" + "ipt src=\"" + url + "\"></scr" + "ipt>");
</script>
这是script2.js
<script>
var value2="Script 2";
</script>
现在我的问题是我可以从script2打印值,就像我在我的script1.js中添加这个(alert(value2);)一样。
<script>
var value1="Script 1";
alert(value1);
//calling script2
url="script2.js"
document.write("<scr" + "ipt src=\"" + url + "\"></scr" + "ipt>");
alert(value2);
</script>
我使用asychronous js作为
var scr = document.createElement('script');
scr.setAttribute('src', url);
var head = document.getElementsByTagName("head")[0];
head.appendChild(scr);
它正在工作,但我想同步实现任何建议??
提前致谢
答案 0 :(得分:0)
在添加第一种情况下的脚本时,只能在打开新的脚本标记后使用script2.js中的值。
<强>的index.html 强>
<script>
var value1="Script 1";
alert(value1);
//calling script2
url="script2.js"
document.write("<scr" + "ipt src='script2.js'></scr" + "ipt>");
</script>
<script>
alert(value2);
</script>
<强> script2.js 强>
var value2='yes';
在本地测试并验证它确实有效(我看到一个带有'yes'的警报),你拥有的(所有在同一个脚本标签中)都不起作用(抛出异常,因为value2未定义)。
答案 1 :(得分:-1)
在javascript中,脚本的顺序始终是同步的。因为您在初始化后添加了脚本2,所以您创建了一个看起来像这样的DOM。
<html>
<head>
<script>
//script 1
</script>
</head>
<body>
---Body content here
</body>
</html>
<script src="script2.js"/>
请注意您如何将脚本放在页面末尾。因为HTML是同步读取的,所以script1将完成执行(包括由于尚未解析script2而未定义value2的alert()),然后将处理HTML正文,然后处理script2.js。
如果您希望在当前脚本的中间同步加载辅助脚本,则必须执行XMLHTTPRequest
并获取内容,然后运行eval(script_2_content)
。 Eval将同步编译和解析第二个脚本。
你当时要做的是:
<html>
<head>
<script>
//script 1 before loading script 2
//script 2 content
//script 1 content after loading script 2
</script>
</head>
<body>
---Body content here
</body>
</html>
答案 2 :(得分:-1)
听起来像是想要asynchronous function, with a callback。 (第一个答案,完全显示你的例子!)。
基本上,当函数加载完脚本后,它会调用回调函数,在那里你应该能够运行alert(value2);
脚本。
否则,如果要使用document.write,则可以使用以下选项:
(我认为问题是,* .js文件中的<script></script>
标记,它们不是必需的!)
<强> src1.js 强>
document.write('<script src="src2.js"></script'+'>');
document.write('<script>alert(value2);</script'+'>');
<强> src2.js 强>
var value2 = 'foobar!'
HTML
<html>
<body>
<script src="src1.js"></script>
</body>
</html>
这是否符合您的要求?