2014-09-05 91 views
0

我正在學習javascript,並希望在我的代碼中使用同步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打印值(警報(值2);)在我SCRIPT1 .js文件。

<script> 

var value1="Script 1"; 
alert(value1); 

//calling script2 
url="script2.js" 
document.write("<scr" + "ipt src=\"" + url + "\"></scr" + "ipt>"); 
alert(value2); 
</script> 

我已經這樣做了使用臺異步JS作爲

var scr = document.createElement('script'); 
scr.setAttribute('src', url); 
var head = document.getElementsByTagName("head")[0]; 
head.appendChild(scr); 

這是工作,但我想同步實現這一目標有什麼建議?

在此先感謝

+1

有人給我-1?爲什麼我學習javascript可能是很多很簡單的問題,但我很困惑,在這一個我只需要解釋 – user3754674 2014-09-05 01:41:53

+0

腳本打開標籤是'' – Igor 2014-09-05 01:44:30

+0

哦謝謝我更新了這一個。 – user3754674 2014-09-05 01:46:26

回答

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'; 

本地檢驗和驗證,它並工作(我看到 '是' 警報),以及你有(全部在相同的腳本標記中)不起作用(拋出異常,因爲value2未定義)。

+0

這是什麼意思,你可以詳細解釋一下? – user3754674 2014-09-05 01:51:11

+0

在你使用value2的地方開始一個新的腳本標記,它會起作用 – 2014-09-05 01:52:49

+0

你的意思是添加document.write(「

-1

在JavaScript中,腳本的順序始終是同步的。因爲您在初始化後添加了腳本2,所以您創建了一個如下所示的DOM。

<html> 
    <head> 
     <script> 
     //script 1 
     </script> 
    </head> 
    <body> 
     ---Body content here 
    </body> 
</html> 
<script src="script2.js"/> 

請注意如何將腳本放在頁面末尾。因爲HTML是同步讀取的,所以script1將完成執行(包括alert()(其值爲2未定義,因爲script2尚未分析),然後處理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> 
+0

爲什麼downvotes?這是我對HTML解析器如何工作的理解。 – 2014-09-05 03:52:06

-1

聽起來像是你想要一個asynchronous function, with a callback。 (第一個答案,正好顯示你的例子!)。

基本上,當函數完成加載腳本時,它會調用回調函數,在那裏你應該能夠運行你的alert(value2);腳本。

否則,如果你想使用文檔。寫,你有以下選擇:

(我認爲這個問題是,在你的* .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> 

這是否符合您的要求?

+0

我想使用document.write進行內聯 – user3754674 2014-09-05 01:55:14