You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AJAX从MySQL获取上下行时,点击上一页始终返回首行的问题

问题分析与解决方案

我来帮你搞定这个问题!你的核心问题出在获取上一条数据时的排序逻辑缺失:

当你点击「上一页」按钮时,后端代码只筛选了 id < 当前card_id 的记录,但没有指定排序规则。数据库默认会按id升序返回结果,getOne() 方法就会取到符合条件的第一条记录(也就是id最小的那条),这就是为什么你每次点上一页都会回到第一条数据。

我们需要的是当前id的前一条数据,也就是所有id < 当前card_id的记录中,id最大的那条——这就需要给查询加上ORDER BY id DESC的排序规则。

修改后的后端PHP代码

<?php
include 'config.php';
if(isset($_POST["card_id"])) {
    $card_id = $_POST["card_id"];
    if(isset($_POST["next"])){
        // 下一条:找id大于当前的,按id升序取第一条
        $db->where("id", $card_id, ">" )
           ->orderBy("id", "ASC");
        $flaschcard = $db->getOne('cards') ;
    }
    if(isset($_POST["prev"])){
        // 上一条:找id小于当前的,按id降序取第一条(也就是最大的那个符合条件的id)
        $db->where("id", $card_id, "<" )
           ->orderBy("id", "DESC");
        $flaschcard = $db->getOne('cards') ;
    }
    if(isset($flaschcard)) {
        echo json_encode($flaschcard);
    }
}

为什么这样修改?

  • 对于「下一条」:我们需要比当前id大的最小id,所以按id ASC排序后取第一条,逻辑正确。
  • 对于「上一条」:我们需要比当前id小的最大id,所以按id DESC排序后取第一条,这样就能拿到真正的前一条数据,而不是跳到最开头。

前端小优化(可选)

你可以把前端的alert(card_id)换成console.log(card_id),这样调试信息会输出在浏览器控制台,不会影响用户体验:

// 替换success里的alert
console.log('当前card_id:', card_id);

这样修改后,点击上一页按钮就会正确返回上一条数据啦!

内容的提问来源于stack exchange,提问作者Marcos T. Gobriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:42:23