【问题标题】:Mysqli / Ajax How to load x more Results each request?Mysqli / Ajax 如何为每个请求加载 x 更多结果?
【发布时间】:2015-11-17 06:33:47
【问题描述】:

这里我有一个数据库请求:

$query = mysqli_query($db, "
    SELECT * FROM posts p INNER JOIN friends f ON
      ((p.from_user=f.user1 OR p.from_user=f.user2) AND (f.user1='$ownid' OR f.user2='$ownid') AND f.accepted='1') 
      GROUP BY p.id ORDER BY p.uhrzeit DESC ;           
");

还有一个用于检查滚动位置的简单 Javascript。

$(window).scroll(function () {
    if ($(this).scrollTop() > 1500) {

    } 
});

当然,这些只是没有文档就绪功能等的代码片段。

我现在的问题是:每次触发滚动功能时,如何通过 Ajax 请求获取页面加载时的前 15 个结果?

我怎样才能在我的实际查询中实现这一点?

感谢您的每一个回答。 如果有遗漏的信息请索取,我会更新。

编辑 我现在做了什么

JS

var offset = 15,
scrollEnd = false;

$(window).scroll(function(){
                if($(window).scrollTop() >= $('.footer').offset().top && typeof scrollEnd !== 'undefined' && !scrollEnd){
                alert();
                $.ajax({
                url: "./ajax/loadmore_homeposts.php",
                data : {offset: offset},
                beforeSend: function(){
            scrollEnd = true;
            }
                success:function(r){
                        if(r.data.length){
                            // + you have result
                            offset *=2;
                            // prepare the html and append into the respective container

                            alert(r);

                            scrollEnd = false;
                        }else{
                        alert("<p>No more result</p>");
                            $('.result_container').append('<p>No more result</p>');
                        }
            }
            })
            }
             });

PHP

$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);


    $ownid= $_SESSION['SESSION'];
    $offset = isset($_GET['offset']) ?  $_GET['offset'] : 0;
    $limit = 15;

   $query=mysqli_query($db,
            "
            SELECT * FROM posts p INNER JOIN friends f ON
             ((p.from_user=f.user1 OR p.from_user=f.user2) AND (f.user1='$ownid' OR f.user2='$ownid') AND f.accepted='1') 
                 GROUP BY p.id ORDER BY p.uhrzeit DESC  limit $offset,$limit;           
             ");


    $data = [];
    while(($row = mysqli_fetch_array($result))){
        $data[] = $row;
    }
    echo json_encode( ['data'=>$data]);

    ?>

【问题讨论】:

  • 起初您的滚动检查不正确。您不应该使用常量检查 scrollTop ,您应该检测页脚的偏移量顶部,然后确定您的滚动偏移量更大或接近页脚偏移量,所以这意味着用户已经向下滚动到页脚,所以你有加载新内容
  • 你能给我一个例子吗?会很棒:)

标签: javascript php jquery ajax mysqli


【解决方案1】:

您可以为此使用 mysql 偏移量和限制。像这样

$sql = "SELECT * FROM menuitem LIMIT" . $偏移量。 “,”。 $items_per_page;

它将在 $items_per_page 中查看偏移量行和项目数。

【讨论】:

    【解决方案2】:
                // + in php
                $offset = isset($_GET['offset']) ?  $_GET['offset'] : 0;
                $limit = 15;
                $result = mysqli_query("[YOur query] limit $offset,$limit");
    
                $data = [];
                while(($row = mysqli_fetch_array($result))){
                    $data[] = $row;
                }
                echo json_encode( ['data'=>$data]);
    
                //=  in javascript
                var offset = 15,scrollEnd = false;
                $(window).scroll(function(){
                    if($(window).scrollTop() >= $('.footer').offset().top && typeof scrollEnd !== 'undefined' && !scrollEnd){
                    $.ajax({
                    url: your url
                    data : {offset: offset},
                    beforeSend: function(){
                scrollEnd = true;
                }
                    success:function(r){
                            if(r.data.length){
                                // + you have result
                                offset *=2;
                                // prepare the html and append into the respective container
                                scrollEnd = false;
                            }else{
                                $('.result_container').append('<p>No more result</p>');
                            }
                }
                })
                }
                })
    

    【讨论】:

    • 好的,谢谢 :) 我试过了,我用我到目前为止所做的更新了我的问题。但是哪里有错误?似乎不能在 atm 工作:/
    • 我没有页脚 div :D ?我做了一个,但它没有触发
    • 您没有在滚动回调中收到第一个警报?如果没有在浏览器控制台上尝试$(window).scrollTop() 这段代码,并以相同的方式记下值和$('.footer').offset().top。一旦第一个大于第二个,滚动回调应该触发
    • 谢谢我稍后会测试它:)
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多