我想要比较div的高度并追加side add,而side div从另一个div获得相同的大小,但是我的代码得到了一个无限循环。
//the i var its just for testing with a non infinity loop
var i = 0;
while($('#lista-body').height() > $('#ads-side').height() && i < 10){
$.post("getADSSide.php" , { cliente: '<?=$clienteCrypt?>' }, function(data){
if (data != '' || data != undefined || data != null){
setTimeout(function(){ $('#ads-side').append(data);}, 1000);
}
});
i++;
}
答案 0 :(得分:1)
同步执行意味着客户端在执行下一个JavaScript语句或评估表达式的下一个术语之前等待方法完成执行并返回其结果。
异步执行意味着在客户端调用该方法之后,它会继续执行下一个JavaScript语句或评估表达式的下一个术语,无论异步方法是否完成并返回结果。
来自Progress Data Objects Guide and Reference
Ajax($.post
,或更具体地说,回调函数)是一个异步操作。您实质上是在尝试使用同步代码来等待异步操作,这将永远不会起作用(或者如果确实如此,它将非常糟糕地执行)。特别是当您的同步代码继续执行进一步的异步Ajax指令时。
如果要填充div直到其高度足够,请计算回调内的高度,如果内容不足,请重新执行Ajax调用:
function fillAds() {
$.post("getADSSide.php" , { cliente: '<?=$clienteCrypt?>' }, function(data){
if (data != '' || data != undefined || data != null){
setTimeout(function(){
$('#ads-side').append(data);
if($('#lista-body').height() > $('#ads-side').height()) {
fillAds();
}
}, 1000);
}
});
}
在此代码外部的另一个fillAds();
调用。
另请注意,通过进行此简单更改,如果异步操作失败(例如数据未定义,空,null或方法无法完全执行),我们不会尝试进行进一步的Ajax调用。好哇!免费错误处理!