当没有更多数据时如何停止无限循环(分页)

Posted

技术标签:

【中文标题】当没有更多数据时如何停止无限循环(分页)【英文标题】:how to stop infinite loop when there is no more data (pagination) 【发布时间】:2020-04-28 19:50:46 【问题描述】:

我需要帮助我在分页中使用这个 jquery 脚本来创建延迟加载/无限滚动。

加载工作正常,但是,每当加载新数据时它会一直显示 1,如果没有更多数据,它会无限地保持加载 1 1 1 1。如果 db 中没有更多数据,我需要帮助摆脱 1 并停止加载。

我的脚本:

<script type="text/javascript">
    $(window).scroll(function() 
        if($(window).scrollTop() + $(window).height() >= $(document).height()) 
            var last_id = $(".post-id:last").attr("id");
            loadMoreData(last_id);
        
    );


    function loadMoreData(last_id)
      $.ajax(
            
                url: 'LoadingData1.php?last_id=' + last_id,
                type: "get",
                beforeSend: function()
                
                    $('.ajax-load').show();
                
            )
            .done(function(data)
            
                $('.ajax-load').hide();
                $("#load-data").append(data);
            )
            .fail(function(jqXHR, ajaxOptions, thrownError)
            
                  alert('There's an issue with Loading...');
            );
    
</script>

我的 LoadingData1.php 代码

<?php
                            $newid = $_GET['last_id'];
                            $not = $db -> prepare('SELECT * FROM orderinhomeonlinecall WHERE id < ? AND cuid=? ORDER BY id DESC LIMIT 10');
                            $not -> bind_param('ii', $newid, $uid);
                            $not -> execute();
                            $result = $not->get_result();       
                            $json = include('data1.php');
                            echo json_encode($json);

?>


我的data1.php代码:

<?php while ($row = $result->fetch_array()) 
                                $id1 = $row['id'];
                                $orderId1 = $row['orderId'];
                                $serviceName1 = $row['serviceName'];
                                $totalprice1 = $row['totalprice'];
                                $orderStatus1 = $row['orderStatus'];
?>



                                <a href="booktype/orderdetails.php?orderId=<?php echo $orderId1; ?>" class="post-id" id="<?php echo $id1 ?>">
                                <?php switch ($orderStatus1) 
                                        case 1: ?>
                                    <i class="fa fa-circle color-gray2-dark"></i>
                                    <span><?php echo $serviceName1; ?></span>
                                    <strong><?php echo $ctype1; ?></strong>

                                    <em class="bg-gray2-light font-11">&#8358;<?php echo $totalprice1; ?></em>
                                        <?php break;


                                        case 2:
                                        case 3:
                                        case 4:
                                        case 5:
                                            ?>
                <i class="fa fa-circle color-blue2-dark"></i>
                                    <span><?php echo $serviceName1; ?></span>
                                    <strong><?php echo $ctype1; ?></strong>
                <em class="bg-blue2-light font-11">&#8358;<?php echo $totalprice1; ?></em>
                                        <?php break;
                                        case 6:
                                            ?>
                <i class="fa fa-circle color-green2-dark"></i>
                                    <span><?php echo $serviceName1; ?></span>
                                    <strong><?php echo $ctype1; ?></strong>
                <em class="bg-green2-light font-11">&#8358;<?php echo $totalprice1; ?></em>
                                        <?php break;

                                        case 10:
                                        case 11:
                                            ?>
                <i class="fa fa-circle color-red2-dark"></i>
                                    <span><?php echo $serviceName1; ?></span>
                                    <strong><?php echo $ctype1; ?></strong>
                <em class="bg-red2-light font-11">&#8358;<?php echo $totalprice1; ?></em>
                                            <?php 
                                            break;
                                              ?>
                                    <i class="fa fa-angle-right"></i>
                                </a>

                                <?php 
                                
                                        ?>

任何帮助将不胜感激。

【问题讨论】:

将 Json 部分 $json = include('data1.php'); echo json_encode($json); 更改(删除)为 include('data1.php');。如我所见,json 代码在您的代码中没有任何作用 谢谢迪莱克。我只是这样做了,1s就不见了。然而,循环并没有停止。它不断循环已经加载的结果。 并且循环中应该有一个 div &lt;div class="post-id" id="&lt;?php echo $row['last_id']; ?&gt;"&gt; /*do your other things in here*/ &lt;/div&gt; 你的代码应该很简单很难阅读所有的代码,对不起。 id=" 使它根本不加载。需要 $id1 来显示来自 db 的行。这件事非常棘手,似乎找不到问题所在。 last_id 只是一个例子,我看到你的罐子 id 是 id,看答案 【参考方案1】:

正如我在评论中所说,json 代码与您的 php 无关,

在 while 循环中,您需要向 ajax 控件显示一个类或 id。

最终解决方案应如下所示:

您的 php 代码:

$newid = $_GET['last_id'];
$not = $db -> prepare('SELECT * FROM orderinhomeonlinecall WHERE id < ? AND cuid=? ORDER BY id DESC LIMIT 10');
$not -> bind_param('ii', $newid, $uid);
$not -> execute();
$result = $not->get_result();       
include('data1.php');

你的 while 循环:

<?php 
    while ($row = $result->fetch_array()) 
    $id1 = $row['id'];
    $orderId1 = $row['orderId'];
    $serviceName1 = $row['serviceName'];
    $totalprice1 = $row['totalprice'];
    $orderStatus1 = $row['orderStatus'];
?>

你的 html 在循环中:

<div class="post-id" id="<?php echo $id1; ?>">

  /*Do your other things in here */

</div>
<?php  ?>

还有ajax代码:

loaded = true; //Initialize
$(window).scroll(function() 
   if(($(window).scrollTop() == $(document).height() - $(window).height()) && loaded)  //Add in condition
       var last_id = $(".post-id:last").attr("id");
       loadMoreData(last_id);
   
);

function loadMoreData(last_id)
 loaded = false; //False at start ajax call
 $.ajax(
       url: '/loadMoreData1.php?last_id=' + last_id,
       type: "get",
       beforeSend: function()
       
           $('.ajax-load').show();
       
   )
   .done(function(data)
   
           $('.ajax-load').hide();
           $("#post-data").append(data);
           loaded  = true; //true to load data
   )
   .fail(function(jqXHR, ajaxOptions, thrownError)
   
         alert('No response...');
         loaded  = true;
   );

这里的例子https://www.itsolutionstuff.com/post/php-infinite-scroll-pagination-using-jquery-ajax-exampleexample.html

【讨论】:

url: '/loadMoreData1.php?last_id=' + last_id,不加载。它仅在我用 url 替换它时加载:'loadMoreData1.php?last_id=' + last_id.... 这是省略 /。谢谢您的帮助。现在一切正常 @LouisWebSolutions 因为你使用的是#RewriteBase /&lt;base&gt; 标签,很高兴我帮助了

以上是关于当没有更多数据时如何停止无限循环(分页)的主要内容,如果未能解决你的问题,请参考以下文章

如何防止这种无限循环

使用三个视图的无限循环分页 UIScrollView

Objective C如何在从第一个VC移动到第二个时停止无限循环

如何在反应原生渲染中以无限循环返回数组项视图?

如何在useEffect中停止无限循环?

为啥这个回调会产生无限循环