Javascript ajax()异步而不冻结
我正在制作一个无限滚动页面。有时这段代码工作得很好,有时它首先加载第13页,当它应该首先加载第1页(第0页,索引已经加载)时,然后加载第2、3、4页,等等,当用户从页面底部以400px的速度运行时。有时页面在同一时间加载两次,因此会出现1,2,2,3,4,5,5,6 我已将async设置为true,但希望它为false。false的问题是冻结页面。为了绕过这个问题,我添加了变量'LoadingMoreops'。在调用.ajax()之前,loadingMoreOpps必须为false,并在与滚动位置检查相同的条件语句中进行检查Javascript ajax()异步而不冻结,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,我正在制作一个无限滚动页面。有时这段代码工作得很好,有时它首先加载第13页,当它应该首先加载第1页(第0页,索引已经加载)时,然后加载第2、3、4页,等等,当用户从页面底部以400px的速度运行时。有时页面在同一时间加载两次,因此会出现1,2,2,3,4,5,5,6 我已将async设置为true,但希望它为false。false的问题是冻结页面。为了绕过这个问题,我添加了变量'LoadingMoreops'。在调用.ajax()之前,loadingMoreOpps必须为false,并在与滚动位
var loadingMoreOpps = false;
var oppPagesLoaded = 1;
$(window).scroll(function () {
if (($(window).scrollTop() + $(window).height() >= ($(document).height() - 400)) && !loadingMoreOpps) {
loadingMoreOpps = true;
$.ajax({
type: 'POST',
url: 'templates/opportunities/loadmore.php',
data: { page: oppPagesLoaded },
beforeSend: function(response) {
},
dataType: 'html',
async: true
}).
done(function(response) {
$('#opp_container').append(response);
loadingMoreOpps = false;
oppPagesLoaded++;
}
);
}
})");
问题是当我再次加载页面时,
oppPagesLoaded
没有重置为1,因为我的web应用程序严重基于AJAX
为了解决这个问题,我只添加了
oppPagesLoaded=1无需重新声明相关代码块顶部的变量即可执行代码>操作。您可能只需要取消.scroll()
事件的抖动,以便处理最后一个滚动事件,而不是第一个滚动事件。另外,现在您已经有了loadingmoreops
,我不确定您的问题是什么。我认为loadingmoreops
会阻止.ajax(
在返回内容之前,scroll事件中不允许多次调用,但似乎不是这样。加载MoreOpps
应该可以防止一次调用多个ajax。我没有发现问题。问题是OppPages在我再次加载页面时没有重置为1,因为我的web应用程序使用了大量ajax为了解决这个问题,我只添加了oppPagesLoaded=1;而没有在相关代码块的顶部重新声明变量。