【问题标题】:PHP and Ajax pagination. Why GET method always returns empty value?PHP 和 Ajax 分页。为什么 GET 方法总是返回空值?
【发布时间】:2025-12-23 01:30:07
【问题描述】:

我正在尝试添加分页,即使代码看起来正确,页面也只显示前 10 个结果(每页我想要 10 个结果)。正如您在下面看到的,问题似乎是在$_GET 方法中创建的。

这是 ajax:

   function displayAllTopics() {
        $.ajax({
          url: "requests.php",
          type: "GET",
          data: {
          keyPagination: "displayAllTopics"
          },
          dataType: "json",
          success: function(response) {
            $("#topicArea").append(response.response_message);
            $("#pagination").append(response.pagination);
          }
        });
      }

这是requests.php 文件:

  if(isset($_GET['keyPagination'])) {
 if($_GET['keyPagination'] == "displayAllTopics") {
   $sql =  "SELECT * FROM travel";
   $result = mysqli_query($conn, $sql);
   $count_topics = mysqli_num_rows($result);
   if($count_topics < 1) {
     exit('There are no topics yet.');
   }

   if(isset($_GET['page'])) {
     $page = $_GET['page'];
   }
   else {
     $page = 1;
   }

    //results per page
    $results_per_page = 10;
    //number of pages
    $offset = ($page-1) * $results_per_page;
    $number_of_pages = ceil($count_topics / $results_per_page);

     $sql_pagination = "SELECT * FROM travel LIMIT $offset, $results_per_page";
     $results_pagination = mysqli_query($conn, $sql_pagination);
     $response_message = "";
     $pagination = "";
   while($row = mysqli_fetch_assoc($results_pagination)) {
     $user_id = $row['user_id'];
     $travel_subject_id = $row['travel_subject_id'];
     $travel_subject_date = $row['travel_subject_date'];
     $travel_title = $row['travel_subject_title'];
     $travel_body = $row['travel_subject_body'];
     $travel_comments_count = $row['travel_comments_count'];
     $travel_views = $row['travel_subject_views'];
     $travel_subject_date_format = date('j M y H:i', strtotime($travel_subject_date));
     $sql_user = "SELECT * FROM forum_users WHERE user_id='$user_id'";
   $result_user = mysqli_query($conn, $sql_user);
   if($row_user = mysqli_fetch_assoc($result_user)) {
     $username = $row_user['username'];
   $response_message .= "<tr>
     <td><a href='travel_subject.php?id=".$travel_subject_id."' onclick='countview(".$travel_subject_id.");'><img src='topic.png' class='img_first'>$travel_title</a></td>
     <td><img src='comment.png' class='img_second'><p>$travel_comments_count</p></td>
     <td><a href='profile_user.php?id=".$user_id."'><img src='avatar.png' class='img_third'>$username</a></td>
     <td><p><img src='views.png' class='img_four'>$travel_views</p></td>
     <td><p>$travel_subject_date_format</p></td>
     </tr>";
   }
 }
 for ($i = 1; $i <= $number_of_pages; $i++) {
  $pagination .= "<a href='forum_index.php?page=".$i."&limit=".$offset."'>$i</a>";
 }

 $data = array('response_message' => $response_message, 'pagination' => $pagination);
 echo json_encode($data);

 exit();
 }
 }

注意:变量$page始终为1,因此似乎无法设置$_GET['page'],因此,下面的页面始终显示前10个结果。这是为什么呢?

这是我想要显示结果的 php 文件:

 <div class='display-subjects'>
  <table class='display-subjects-table' cols='5'>
<tbody id="topicArea">
  </tbody>
</table>
</div>
<div id='pagination'>
  <?php
  if(isset($_GET['page'])) {
    $page = $_GET['page'];
  }
  else {
    $page = 1;
  }
?>
</div>

错在哪里?提前致谢。

【问题讨论】:

  • data: 选项中没有 page: 参数。你认为$_GET['page'] 来自哪里?

标签: php ajax pagination get


【解决方案1】:

displayAllTopics()需要将页码作为参数,然后在data选项中传递。

function displayAllTopics(pageNum) {
    $.ajax({
      url: "requests.php",
      type: "GET",
      data: {
        keyPagination: "displayAllTopics",
        page: pageNum
      },
      dataType: "json",
      success: function(response) {
        $("#topicArea").append(response.response_message);
        $("#pagination").append(response.pagination);
      }
    });
  }

【讨论】:

  • 你是对的。问题解决了。之前没有工作,因为我没有声明变量 pageNum。