2013-02-24 76 views
1

下面是異步JavaScript片段:異步的JavaScript - 如何傳遞參數?

var bsa = document.createElement('script'); 
bsa.type = 'text/javascript'; 
bsa.async = true; 
bsa.src = 'myfile.js'; 
bsa.test_var = 'HI!'; 
(document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(bsa); 

我增加了行bsa.test_var = 'HI!'; - 我試圖將參數傳遞到myfile.js有打印出「test_var」,但它不工作。

myfile.js中,我試着打電話alert(bsa.test_var)或只是alert(test_var),但都沒有一個版本不起作用。

有什麼辦法來傳遞參數?我想將參數傳入myfile.js,並根據參數加載數據從數據庫中獲取適當的數據。

謝謝

+0

你能夠'bsa.src ='myfile.js?key1 = val&key2 = val''嗎? – 2013-02-24 12:03:26

+0

我很確定async在代碼中什麼都不做。 – mplungjan 2013-02-24 12:03:42

+0

你的例子適合我。 alert(bsa.test_var)是什麼顯示? – 2013-02-24 12:45:58

回答

2

你不傳遞參數給腳本,傳遞函數的參數。

您將需要更改腳本,以便它實際上不會執行任何操作,直到中的函數被調用,並在該點傳遞參數。

然後,您的問題就成爲了解腳本什麼時候完成加載的問題之一,這可以通過向<script>元素對象添加.onload處理程序來完成。

+0

您可以將參數傳遞給腳本 - 這可能不是他打算做的事情,但可以完成。 http://papermashup.com/read-url-get-variables-withjavascript/ – 2013-02-24 12:05:52

+0

@AInitak,你能給我一個例子/鏈接如何做到這一點? – user984621 2013-02-24 12:11:44

+0

@NicholasPickering是的,他_might_打算將CGI風格的參數傳遞給遠程服務器,然後根據這些值更改JS源。但是,這幾乎從來都不是正確的做法。 – Alnitak 2013-02-24 12:12:43

0

不幸的是,您無法將參數傳遞給腳本。

您可以使用RequireJS加載腳本。您的腳本加載時會收到通知,屆時您可以使用所需的自定義參數執行初始化。不需要使用AMD模塊,但是如果你這樣做,你的代碼將會更好的結構化。

require('myfile.js', function (MyModule) { 
    var myModule = new MyModule(customParameter); 
});