大家好^有这样的代码:
<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 :(得分: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>