【发布时间】:2026-02-09 09:40:01
【问题描述】:
目标是调用一个ajax函数来填充屏幕数据,直到它到达屏幕底部,然后停止。该脚本用于填充屏幕,但不会停留在底部(无限滚动脚本的一部分)。
停止机制是将窗口高度与最后添加数据的位置进行比较。如果到达底部,则将“i”设置为100,从而结束循环。
我放置了警报代码来观察这些值,果然,我看到 #load_data.height 点超过了 window.height(意味着加载的数据超过了屏幕底部),但“i”永远不会设置为 100那一点。
我尝试将“停止”代码放置在 3 个不同的地方,但似乎没有一个可以接受。
对问题的一些了解会有所帮助,或者建议一种替代方法来继续加载 ajax 数据,直到到达屏幕底部。代码如下:
var myFunc01 = function(limit,start) {
var i = 0;
while (i < 100) {
(function(i) {
setTimeout(function() {
start=start+limit;
load_data(limit,start);//calls ajax routine to append data to #load_data
//alert is for checking purposes only to view "if" values
alert(
'window height:'+$(window).height()+'\n'+
'load data height:'+$("#load_data").height()+'\n'+
'value of i:'+i
);
if($("#load_data").height() > $(window).height()){i=100;}//this location does not work
}, 1000 * i)
if($("#load_data").height() > $(window).height()){i=100;}//this location does not work
})(i++)
if($("#load_data").height() > $(window).height()){i=100;}//this location does not work
}
};
myFunc01(limit,start);
【问题讨论】:
-
哇。嗯,嗯,首先,循环在任何这些行和警报运行之前完成迭代。这里有很多问题。
-
警报也将在您的 ajax 运行之前以及 ajax 完成插入 html 之前发生...
-
由于警报暂停一切的方式,警报也会改变代码的结果而不是没有警报。
-
所以您是说在比较代码收到正确的显示高度数据之前所有 100 次迭代都已完成,因为还没有显示任何内容?即使我看到每秒都在加载数据,但它只是在 100 次迭代后发生的显示组件?我认为 setTimeout 函数会解决这个问题......显然不是?
-
基本上...做一个递归函数。它加载数据,附加它,检查高度,如果它在可接受的范围内,加载更多数据。重复直到满
标签: javascript jquery ajax infinite-scroll