同步javascript中的问题

时间:2014-09-05 01:38:04

标签: javascript jquery

我正在学习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);

它正在工作,但我想同步实现任何建议??

提前致谢

3 个答案:

答案 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>

这是否符合您的要求?