需要2个函数运行onLoad与Ajax -只有1个工作
Need 2 functions to run onLoad with Ajax - only 1 working
从洗牌函数开始(只是洗牌数组)。它的工作原理。然后我定义了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();">
您需要在异步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();
}
它应该在收到计数后对图片进行洗牌。
相关文章:
- 正则表达式只允许 x 个整数
- 为什么画布形状只在3个画布中的最后一个画布上渲染
- 有效形式-始终只显示1个错误[角度]
- 使用jQuery只返回选中复选框后的第一个表单元格值
- AngularJS-如何只对多个事件的组合采取行动
- 为什么jQuery文件的函数中有两个参数,但只接收一个参数
- 使用多个依赖项加载只进行一次AJAX调用
- Spring WebFlow2 Javascript只在第一个单选按钮上工作
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 在多个元素上使用jquery插件,只需稍作修改
- 使用几个<脚本>标签不会't工作-只调用一个脚本
- If语句只执行第一个条件并运行其他条件,但没有结果
- 为什么我的.blur()代码只处理第二个模糊
- Cookie只设置为一个域名,但网站有多个域名
- 如何在dom中只查找第一个条目
- 多个进度条可视地只更新一个进度条
- 当源文件夹中有多个jade文件时,gulp-ejade只构建一个HTML文件
- 每次只在第一个上单击事件触发器
- 字符串替换只替换第一个匹配项,可以'不要让它全球化
- Webrtc和socket.io:createanswer()总是有一个错误.为什么?我的代码连接了两个对等体,但其中只