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>

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

4

4 回答 4

5

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

直到警报语句触发后,响应才会到达。

做依赖于回调函数中响应的工作

于 2013-09-28T11:01:48.773 回答
1

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

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

于 2013-09-28T11:02:51.067 回答
0

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

所以它array是空的,array.length是零并且Math.random()*0会返回0但是没有array[0]所以它会返回undefined

于 2013-09-28T11:03:24.900 回答
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>
于 2013-09-28T11:08:34.170 回答