更改URL而无需重新加载页面

时间:2020-06-15 00:44:31

标签: javascript php jquery ajax pagination

我正在开发一个博客网站,但在分页方面遇到一些问题。

在共享我的代码之前;

  • 该网站上的所有代码都是我写的,试图不使用ext库。
  • 我只使用JQuery
  • Ergo,我愿意接受任何建议。

现在,代码:

$(document).ready(function () {
  var pageItem = $('.pagination li').not('.prev,.next');
  var prev = $('.pagination li.prev');
  var next = $('.pagination li.next');

  prev.addClass('disabled');
  pageItem.first().addClass('active');

  pageItem.click(function () {
    pageItem.removeClass('active');
    $(this).not('.prev,.next').addClass('active');

    if ($(this).next().hasClass('next')) {
      next.addClass('disabled');
      prev.removeClass('disabled');
    } else {
      next.removeClass('disabled');
    }

    if ($(this).prev().hasClass('prev')) {
      prev.addClass('disabled');
      next.removeClass('disabled');
    } else {
      prev.removeClass('disabled');
    }
  });

  next.click(function () {
    $('li.active').removeClass('active').next().addClass('active');

    if (next.prev().hasClass('active')) {
      next.addClass('disabled');
      prev.removeClass('disabled');
    } else {
      prev.removeClass('disabled');
    }
  });

  prev.click(function () {
    $('li.active').removeClass('active').prev().addClass('active');

    if (prev.next().hasClass('active')) {
      prev.addClass('disabled');
      next.removeClass('disabled');
    } else {
      next.removeClass('disabled');
    }
  });
});
.pagination {
  text-align: center;
  margin-top: 50px;
  margin-bottom: 15px;
}
.pagination li {
  display: inline-block;
  padding: 10px 15px;
  border-radius: 10px;
  transition: background-color 0.5s;
}
.pagination li a {
  text-decoration: none;
  font-size: 15px;
  color: #7c3c01;
}
.disabled {
  pointer-events: none;
}
.disabled a span {
  color: #000000;
}
.active {
  background-color: #e99d57;
  color: #633001;
}
.pagination li:hover:not(.active) {
  background-color: #f0b680;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav aria-label="Page navigation">
        <ul class="pagination">
            <li class="prev">
                <a href="#" aria-label="Anterior">
                    <span aria-hidden="true">&laquo;</span>
                </a>
            </li>
            <!--
            Here's my php code to load the articles from db
            
            <?php
            // PAGINACION
            $total_art = mysqli_num_rows($entradas);
            $art_x_page = 4;
            $pages = ceil($total_art / $art_x_page);

            for ($i = 0; $i < $pages; $i++) : ?>
                <li>
                    <a href="index.php?pagina=<?= $i + 1; ?>"><?= $i + 1; ?></a>
                </li>
            <?php endfor; ?>
            
            To make the example work, i will add some static li
            -->

                <li>
                    <a href="#">1</a>
                </li>
                <li>
                    <a href="#">2</a>
                </li>
                <li>
                    <a href="#">3</a>
                </li>
                
            <li class="next">
                <a href="#" aria-label="Siguiente">
                    <span aria-hidden="true">&raquo;</span>
                </a>
            </li>
        </ul>
    </nav>

如果您测试我的分页,您会发现它工作得很好。 我的问题是php部分,当我添加它时,页面会重新加载以带来数据并刷新页面。因此样式/脚本不再起作用。每当页面重新加载时,样式都是相同的(.prev为.disabled,第一个li为.active)。

我需要的是从db加载数据而无需重新加载页面(因此我的样式/脚本仍然有效),或者在重新加载后修改脚本的方法。 我一直在阅读有关AJAX的文章,我认为这是我所需要的,但是我无法在我的代码中实现它,我认为我不太了解。

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在寻找的是ajaxs来解决您的问题 所以可以说您当前的代码在content.php中

content.php

<nav aria-label="Page navigation">
        <ul class="pagination">
            <li class="prev">
                <a href="#" aria-label="Anterior">
                    <span aria-hidden="true">&laquo;</span>
                </a>
            </li>

                <li class="page_num">
                    <a href="#">1</a>
                </li>
                <li class="page_num">
                    <a  href="#">2</a>
                </li>
                <li class="page_num">
                    <a href="#">3</a>
                </li>

            <li class="next">
                <a href="#" aria-label="Siguiente">
                    <span aria-hidden="true">&raquo;</span>
                </a>
            </li>
        </ul>
    </nav>
<div id="result">
<!-- Load Data here -->
</div>
<script>
 $( ".page_num").click(function(e) { 

    let page_num = $(this).text().trim();
    $.ajax({
      url: '/load_data.php', //location to your php file
      type: 'POST',
      data: {
          page_num: page_num //data to send to the load_data.php file
      },

      success: function(data) {
            $("#result").html(data);
      }

    });

 }); 
</script>

load_data.php

<?php 
$page_num = $_POST["page_num"];
//your php logic here 
echo "MY Content";

?>

因此,基本上您在 load_data.php 文件中回显的所有内容都将在div id="result" content.php 文件中得到输出 现在,这将加载您的内容而无需重新加载页面