情况1:我已将变量传递给外部js文件,如下所示
<script type="text/javascript">
var data1, data2, data3, data4;
function plotGraph() {
var oHead1 = document.getElementsByTagName('HEAD').item(0);
var paramScript = document.createElement("script");
paramScript.type = "text/javascript";
paramScript.setAttribute('data1', data1);
paramScript.setAttribute('data2', data2);
paramScript.setAttribute('data3', data3);
paramScript.setAttribute('data4', data4);
oHead1.appendChild(paramScript);
var oHead = document.getElementsByTagName('HEAD').item(0);
var oScript = document.createElement("script");
oScript.type = "text/javascript";
oScript.src = "js/graph.js";
oHead.appendChild(oScript);
}
</script>
Run Code Online (Sandbox Code Playgroud)
案例2:我甚至尝试使用jquery这样传递它
<script type="text/javascript">
function plotGraph() {
var data1, data2, data3, data4;
$.getScript("js/graph.js");
}
</script>
Run Code Online (Sandbox Code Playgroud)
在第一种情况下工作,但我不得不创建全局变量...我不想要这个......
在第二种不起作用的情况下,局部变量在js文件中无法识别.
我该怎么办?有什么建议?
变量只能在不同的脚本之间共享,如果它们是:
编辑:既然OP已经解释了他们真正想要做的事情(将ajax调用中的数据传递给外部脚本中的函数),这个问题的真正答案是这样的:
您应该在外部脚本中调用ajax调用的成功处理程序中的全局函数,并将这些数据元素传递给该函数.然后,外部脚本中的函数可以立即对数据执行操作,也可以将数据保存在自己的变量中以供以后使用.
仅供参考:$.getScript()在全局级别加载脚本.这就是你的案例2不起作用的原因.
共享对一组变量的访问权的一种方法是将它们全部作为对象的属性,然后使该对象成为全局对象,或者提供检索对该对象的访问权的全局函数.例如,您可以声明具有许多属性的单个全局对象.
var myConfigObject = {
data1: value1,
data2: value2,
data3: value3,
data4: value4
};
Run Code Online (Sandbox Code Playgroud)
要调用外部脚本文件中的函数,您将执行以下操作:
doIt(a, b, c, d)- 一个有四个参数的函数.doIt()并传递所需的数据值即可doIt(3, "foo", data4, whatever).doIt(a, b, c, d),您可以获得传递给它的那四个数据值.所以,在你的外部文件中,你有这个:
function doIt(a, b, c, d) {
// do whatever doIt wants to do
// use the arguments passed to this function
}
Run Code Online (Sandbox Code Playgroud)
在你的主index.html文件中,你有一个ajax调用:
$.ajax(..., function(data) {
// process the returned data from the ajax call
// call doIt
doIt(3, "foo", data4, whatever);
});
Run Code Online (Sandbox Code Playgroud)