Ajax срабатывает сразу несколько раз

269
19 июля 2021, 03:10

Почему ajax запрос срабатывает сразу несколько раз?

$(window).scroll(function () {
    let height_win = false;
    if ($(window).height() + $(window).scrollTop() >= $(document).height() - 200 && !height_win) {
        height_win = true;
        indexcat = $('.news_category.active').index() + 1;
        $.ajax({
            url: '/modal?route=news/id=' + indexcat,
            type: 'GET',
            data: {},
            dataType: 'JSON',
            success: function success(response) {
                if (response.data != "") {
                    if (response.data.length > 0) {
                        var el = $(response.data);
                        $("#news").append(el).masonry('appended', el, true);
                    }
                    height_win = false;
                }
            }
        });
    }
});

Но если в условии сделать просто:

if ($(window).height() + $(window).scrollTop() >= $(document).height() && !height_win) /* скролить полностью до конца страницы

То все работает хорошо.

Answer 1

Потому, что $(window).scroll плюс if с условием >= плюс флаг height_win явно не так использован

let i = 0, 
  wh = $(window).height(), 
  dh = $(document).height(), 
  height_win = false; 
$(window).scroll(function () { 
  let 
    whSt = $(window).scrollTop(), 
    v1 = wh + whSt, 
    v2 = dh - 200; 
    if (v1 > v2 && !height_win) { 
      i++; 
      console.log(v1 + ' > or = ' + v2); 
      console.log('scroll event firing ' + i + ' times'); 
      height_win = true; 
    } 
    if (v1 < v2) { 
      height_win = false; 
    } 
})
#scroll{height:1000px}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<div id="scroll"><div>

READ ALSO
Navbar в слайдере

Navbar в слайдере

Каким способом можно navbar вытянуть на слайдер поверх его??? Чтобы под ним фон менялся, а сам navbarоставался там же Смотрел сайт У него была такая...

289
Найти точки пересечения графиков в c#

Найти точки пересечения графиков в c#

У меня есть программа, которая строит два графика, добавляя точки к какой-то встроенной функции построения графика (на выходе должны получиться...

270