从shuffle函数开始(只是shuffles数组)。有用。 然后我定义了2个全局变量,这些变量将确定要在页面上显示的图像的随机顺序。 picOrder将是一个从0到picCount的简单数组,picCount由Ajax onload决定。正在检索picCount,但没有设置picOrder数组!如果我手动运行“arrangePics();”在它的控制台中工作。它填充数组picOrder,然后将其洗牌。但是通过将调用放在“”中的两个函数或者将“doStuff()”函数放在那里它不起作用。
Array.prototype.shuffle = function() {
var s = [];
while (this.length) s.push(this.splice(Math.random() * this.length, 1)[0]);
while (s.length) this.push(s.pop());
return this;
}
var picOrder = new Array();
var picCount;
function getPicCount() {
// picCount = array(10);
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
picCount = xmlhttp.responseText;
}
}
xmlhttp.open("GET","/example.com/images.php?count=hello",true);
xmlhttp.send();
//picCount.shuffle;
}
function arrangePics() {
for(var i = 0;i<picCount;i++) {
picOrder[i] = i;
}
picOrder.shuffle();
//alert(picOrder);
}
HTML
<body onLoad="getPicCount();arrangePics();">
或
<body onLoad="doStuff();">
答案 0 :(得分:0)
在异步AJAX调用返回后你需要arrangePics()
,即你只能在if (xmlhttp.readyState==4 && xmlhttp.status==200) {}
(回调)块中调用它,否则你无法确定数据已经完全收到。
目前正在发生的是JavaScript正在调用getPicCount();arrangePics();
- 第一个方法启动AJAX调用并立即返回,然后第二个方法将尝试安排0个图片。在控制台上手动执行arrangePics()
会在系统中引入足够的延迟以完成AJAX调用,picCount
将按预期设置。
因此,如果您将回调函数更改为:
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
picCount = xmlhttp.responseText;
for(var i = 0;i<picCount;i++) {
picOrder[i] = i;
}
picOrder.shuffle();
}
它应该在收到计数后洗牌。