2012-04-09 114 views
2

代码示例:如何定义全局数组?

<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

例如在我的测试中正常工作。你原来的问题有“新”,而不是“新”,没有工作 – dtech 2012-04-09 17:16:21

+0

@dtech他正在加载的第一个脚本是异步的。那是他的问题,请参阅我的回答 – xandercoded 2012-04-09 17:17:37

+0

@Zee T恤,你应该放在一起[小提琴](http://jsfiddle.net)。 – Alexander 2012-04-09 17:19:12

回答

6

New不是关键字。

用途:

var data = new Array(); 

或者,更简洁:

var data = []; 

后你编辑你提到的第一个脚本块被异步加载。你的代码不能像写入一样工作。 data是一个全局变量,一旦它被加载到页面上。您需要使用回调模式来正确执行代码。

既然你还没有发布的异步代码我不打算提供callback样品。尽管如此,快速解决方案如下:

var interval = setInterval(function(){ 
    if(data) { 
     /* ... use data ... */ 
     clearInterval(interval); 
    } 
}, 500); 
+0

@jlafay,这是一个答案,它是否是真正的问题。 – Alexander 2012-04-09 17:11:55

+0

大声笑......为什么这不应该是一个答案? – MilkyWayJoe 2012-04-09 17:13:47

+0

我做'新'它的同样的错误。 – 2012-04-09 17:15:30

1

要创建全局变量,只需从语句中省略'var'即可。当你省略'var'时,你实际上是在窗口命名空间中创建变量。

所以,zz = 1实际上是window.zz = 1

如果你真的想,你可以明确地说

window.data = new Array(); //remember that new should be lowercase. 

但是你可以说

data = ['hi','bye']; 
alert(data); 
+0

请参阅修订的代码。第一个脚本块加载w/ajax – 2012-04-09 17:20:03

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 
});