2013-09-28 19 views
0

嗨,大家好^有這樣的代碼:瓦爾未定義

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script> 
</head> 

<body> 
<script type="text/javascript"> 
var array = []; 
$.get("http://wisepla3nt.com/331.txt", 
     function(data) { 
      array = data.split(/\r\n|\r|\n/) 
     } 
); 
</script> 
<script>alert(array[Math.floor(Math.random()*array.length)]);</script> 
</body> 
</html> 

在警報已經不確定的。爲什麼?數組是全局的。

+0

可能重複[如何返回從AJAX調用的響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-呼叫) – adeneo

回答

5

您傳遞給get的功能不會立即執行。它被分配爲一個事件處理程序,並在瀏覽器獲得對HTTP請求的響應時觸發。

響應不會在警報聲明被觸發之後到達。

在回調函數中執行取決於響應的工作。

1

可能因爲您在$ .get函數返回之前發出警告。

$ .get方法是一個Ajax調用,這意味着它是異步的。嘗試將您的警報代碼移到回調方法中。

0

get是異步的,你以後它的權利和響應來自服務器

所以array是空之前調用alertarray.length是零和Math.random()*0將返回0但沒有array[0]所以返回undefined

0

在數組填充字符串後立即移動alert()。

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script> 
</head> 

<body> 
<script type="text/javascript"> 
var array = []; 
$.get("http://wiseplant.com/1.txt", 
     function(data) { 
      array = data.split(/\r\n|\r|\n/) 
      alert(array[Math.floor(Math.random()*array.length)]); 
     } 
); 
</script> 
</body> 
</html> 
相關問題