2012-04-09 115 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 
});