Var未定义

时间:2013-09-28 10:59:50

标签: javascript

大家好^有这样的代码:

<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>

警报未定义。为什么?数组是全局的。

4 个答案:

答案 0 :(得分:5)

您传递给get的功能不会立即执行。它被指定为事件处理程序,并在浏览器获得对HTTP请求的响应时触发。

直到警告声明被解雇后才会到达。

根据回调函数中的响应进行工作

答案 1 :(得分:1)

可能是因为您在$ .get函数返回之前发出警报。

$ .get方法是一个Ajax调用,这意味着它是异步的。尝试将警报代码移动到回调方法中。

答案 2 :(得分:0)

get是异步的,您在它之后和响应来自服务器之前调用alert

因此array为空,array.length为零,Math.random()*0将返回0,但没有array[0],因此返回undefined < / p>

答案 3 :(得分: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>