Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ajax()异步而不冻结_Javascript_Jquery_Ajax_Asynchronous - Fatal编程技术网

Javascript ajax()异步而不冻结

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,并在与滚动位

我正在制作一个无限滚动页面。有时这段代码工作得很好,有时它首先加载第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;而没有在相关代码块的顶部重新声明变量。