2013-02-24 50 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); 
});