Как отложить загрузку элементов из базы данных mysql, таких как facebook и Twitter (бесконечная прокрутка)

#php #mysql #lazy-loading

#php #mysql #отложенная загрузка

Вопрос:

Я знаю, что есть плагины для ленивой загрузки изображений. У меня есть сайт с кодом купона, на моей странице категории для обуви в моей базе данных у меня есть 500 подходящих купонов. Я не хочу отображать все 500 по очевидным причинам. Я хочу сначала показать только 20, а затем, когда пользователь продолжает прокручивать страницу вниз, он загружает больше купонов. Как бы я это сделал?

РЕДАКТИРОВАТЬ: у меня работает вызов ajax. Вот код, который я использую:

 <script type="text/javascript">
        $(window).scroll(function(){
            if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
                $('div#loadmoreajaxloader').show();
                $.ajax({
                    url: "loadmore.php",
                    success: function(html){
                        if(html){
                            $("#postswrapper").append(html);
                            $('div#loadmoreajaxloader').hide();
                        }else{
                            $('div#loadmoreajaxloader').html('<center>No more posts to show.</center>');
                        }
                    }
                });
            }
        });
</script>
  

Проблема, с которой я столкнулся сейчас, заключается в том, как получать правильные строки из базы данных при каждой прокрутке?

При начальной загрузке страницы я делаю это:

 SELECT * FROM tblCoupons LIMIT 0,20
  

Как должен выглядеть вызов mysql в loadmore.php файл? Я думаю, мне нужно как-то увеличить счетчик …. хммм…

Ответ №1:

Это одна из функций в Интернете, которая, я надеюсь, исчезнет… но вот в чем дело-

При загрузке страницы вы получаете около 100 результатов или сколько угодно, а затем помещаете их в контейнер. При загрузке вы используете jquery для регистрации высоты области содержимого на вашем сайте. Установите начальный индекс, чтобы вы знали, что запрашивать (очевидно, отправляйте соответствующие данные страницы в вашем ajax-вызове), выберите размер экрана и дождитесь прокрутки. При прокрутке вы проверяете смещение вершины прокрутки плюс размер окна, чтобы увидеть, находится ли пользователь внизу страницы в пределах разумного порога — в данном случае с допуском около 100 пикселей. Выполните вызов ajax, а затем добавьте результаты.

 var screen_height = $('body').height();
var cur-y = $(window).scrollTop();
var screen = $(window).height();
var cur_index = 0;
  

Затем примените прослушиватель прокрутки к телу…

 $('body').scroll(function(){
    if($(window).scrollTop()   screen >= (screen_height - 100))
    {
      // make an ajax call to your server and fetch the next 100, then update
      //some vars
        $.ajax({
            url: "your_script.php",
            data: {cur_index:cur_index},
            success: function(){
                cur_index  = 1;
                screen_height = $('body').height();

               // append content to your container

            }
        });
    }
});
  

… в основном.
Это не предназначено для копирования / вставки. но больше похоже на общее руководство о том, как я делал это в прошлом. Вы также должны установить условия, чтобы это срабатывало только один раз для каждого предполагаемого события, поскольку .scroll () прослушивает любое движение прокрутки.

надеюсь, это каким-то образом поможет.

Комментарии:

1. На самом деле это довольно интересно: почему вы думаете, что это должно исчезнуть?

2. @3axap Joe — Потому что это непроизвольное действие. Вы не всегда знаете, что это будет загружаться, элементы могут немного подскакивать, это может вызвать кратковременную задержку в поведении браузера и т.д. Я работаю в веб-фирме, и, кажется, все хотели ленивой загрузки, как будто это модное слово. Вы можете отправлять события analytics при отложенной загрузке, чтобы увидеть, как мало людей прокручивают страницу вниз достаточно далеко, чтобы вызвать ее, и как еще меньше прокручивают страницу вниз, чтобы вызвать больше. Что касается затрат на разработку и необходимых условий — например, если они загрузили 3 страницы, нажали на статью, а затем нажали обратно, это было бы не там, где они остановились — это не стоит бюджета

3. На самом деле вы можете быть правы. Google, в конце концов, не выполняет бесконечный просмотр результатов поиска… по какой-то причине. Я спросил, потому что я работаю над онлайн-словарем для редкого языка, и некоторые поисковые запросы, содержащие несколько символов, выдают много информации. Один из способов справиться с этим — выполнить отложенную загрузку, другой — разбить ее на страницы, и еще один — вообще ничего не делать, что тоже нормально, хотя это может привести к созданию огромной страницы, которую клиенту сложнее обработать. И я как бы разрываюсь на том, какой метод был бы наиболее правильным, если бы мы поставили веб-стандарты на первое место. У людей очень разные мнения…

4. Звучит как шанс написать какой-нибудь алгоритм факторинга, основанный на обычном использовании. Как и слова, содержащие «ae» в английском языке, «водоросли» встречаются намного чаще, чем что-то вроде «faeries» в стиле старого света. Может быть, соотношение веса, категоризация? Вы могли бы представить вкладки для общих слов вместо всего остального. Интересная ситуация, хотя.

5. Итак, в конце концов, вы советуете использовать вкладки вместо разделения на страницы и так далее? Основываясь на этом опыте, я боюсь, что это может запутать пользователей. Как насчет использования выдвижных / динамически обновляемых областей, которые содержат 5 лучших результатов из 4 разных словарей? Вы думаете, это хорошая идея? В конечном итоге алгоритмы факторинга великолепны, но все еще остается проблема с тем, что мы делаем с огромными наборами результатов…