Jquery比较div的高度

问题描述 投票:0回答:1

我想比较div的高度和附加边添加,而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++;
}
jquery loops
1个回答
1
投票

Ajax runs after the loop completes.

同步执行意味着客户端在执行下一个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调用。好哇!免费错误处理!

© www.soinside.com 2019 - 2024. All rights reserved.