代码示例:
<script>
var data = new Array();
data[0] = 'hi';
data[1] = 'bye';
</script>
<script>
alert(data[0]);
</script>
这会出现以下错误:data is not defined
你怎么做这样的工作?特别是如果第一个<script>
块被ajax加载到页面上,并且第二个块正在使用它。 jQuery解决方案是可以接受的。
答案 0 :(得分:8)
New
不是关键字。
使用:
var data = new Array();
或者,更简洁:
var data = [];
编辑后,提到第一个脚本块是异步加载的。您的代码将无法正常工作。一旦将data
加载到页面上,它就是一个全局变量。您需要使用回调模式来正确执行代码。
由于您尚未发布异步代码,因此我不打算提供callback
示例。但是,快速解决方案如下:
var interval = setInterval(function(){
if(data) {
/* ... use data ... */
clearInterval(interval);
}
}, 500);
答案 1 :(得分:2)
要创建全局变量,只需从语句中省略'var'即可。省略'var'时,实际上是在窗口命名空间中创建变量。
因此,zz = 1
实际上是window.zz = 1
如果你真的想,你可以明确说出
window.data = new Array(); //remember that new should be lowercase.
但是你可以通过说
来更快地写出来data = ['hi','bye'];
alert(data);
答案 2 :(得分:0)
如果你正在使用jQuery,也许你应该尝试使用.getScript()
而不是.html()
;
// in separate file
data[0] = 'hi';
data[1] = 'bye';
// in main file
var data = [];
$.getScript(url).done(function() {
alert(data[0]);
}).fail(function() {
// handle error
});
答案 3 :(得分:0)
<script>
data = [];
data[0] = 'hi';
data[1] = 'bye';
</script>
<script>
alert(data[0]);
</script>
使用此命令,删除var会使变量成为全局变量