2014-10-03 2 views
0

я этот кусок JQuery кода реализованы для бесконечной прокрутки на странице:JQuery getScript (URL) дублирует называет

paginate = function() { 
    if ($('.pagination').length) { 
    $(window).scroll(function() { 
     var url; 
     url = $('.pagination a.next_page').attr('href'); 
     if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) { 
     $('.loader').removeClass('hidden'); 
     return $.getScript(url); 
     } 
    }); 
    return $(window).scroll(); 
    } 
}; 

$(document).on("page:load ready", paginate); 

проблема заключается, что, когда эта функция вызывается я вижу в developer_tools/сети 2 получают запросы к Тот же URL, это происходит случайно, может быть 1 запрос, может быть 2.

enter image description here

не удается найти решение в течение нескольких дней в настоящее время. В отчаянной необходимости помощи.

ответ

1

Ну, до того, как сценарий будет загружен, событие прокрутки теоретически может быть запущено много раз. Один из способов обойти это было бы так:

paginate = function() { 
    if ($('.pagination').length) { 
    $(window).scroll(scrollHandler); 
    return $(window).scroll(); 
    } 
}; 

scrollHandler = function() { 
    var url; 
    url = $('.pagination a.next_page').attr('href'); 
    if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) { 
    $('.loader').removeClass('hidden'); 
    $(window).unbind('scroll'); 
    return $.getScript(url, function() { 
     $(window).bind(scrollHandler); 
    }); 
    } 
}; 

Идея заключается в том, чтобы отвязать событие прокрутки, когда запрашивается скрипт, и после загрузки сценария, перепривязывают его.

+0

Почти там, он посылает ONE получить запрос, когда я прокрутите вниз до дна, но он не посылает больше запросов когда я продолжаю прокручивать вниз. Он вызывает функцию paginate только один раз, в то время как я на 100% уверен, что загружено больше страниц. Обновленный javascript, основанный на вашем ответе, выглядит так: https://gist.github.com/rmagnum2002/469c7267ccdc626b6ac4 – rmagnum2002

+0

Нашел рабочий пример, большое вам спасибо за ваше время. +1 – rmagnum2002

+0

Нет проблем. :) –

0

Найденный рабочий пример, отправляет запрос 1 каждый раз.

кофе сценарий:

onEndless = -> 
    url = undefined 
    $(window).off "scroll", onEndless 
    url = $(".pagination a.next_page").attr("href") 

    if url and $(window).scrollTop() > $(document).height() - $(window).height() - 150 
    $(".loader").removeClass "hidden" 
    $.getScript url, -> 
     $(window).on "scroll", onEndless 

    else 
    $(window).on "scroll", onEndless 

$(window).on "scroll", onEndless 
$(window).scroll() 

JS:

var onEndless; 

onEndless = function() { 
    var url; 
    $(window).off('scroll', onEndless); 
    url = $('.pagination a.next_page').attr('href'); 
    // $('.pagination').hide(); 
    if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 150) { 
    $('.loader').removeClass('hidden'); 
    return $.getScript(url, function() { 
     return $(window).on('scroll', onEndless); 
    }); 
    } else { 
    return $(window).on('scroll', onEndless); 
    } 
}; 

$(window).on('scroll', onEndless); 

$(window).scroll(); 
+0

Просто помните, что теперь вы отвязываете и переписываете событие на * каждый * свиток, который очень дорогой по производительности и может замедлить ваш сайт. –

+0

Ну @ ​​МартинДенк, я все еще открыт для лучших идей. :) Итак, если у вас есть некоторые улучшения в этом коде, не стесняйтесь писать их в своем ответе, и я с удовольствием приму это. Я noob в js, поэтому bind/unbind для меня не выглядел дорогим. – rmagnum2002

Смежные вопросы