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

如何在JQuery Ajax请求成功后将路由ID传入PHP查询的Where子句

嘿,看起来你已经搞定了路由ID的存储部分,现在就差把这个ID用到第二个标签页的查询里了对吧?这里有几个靠谱的方案,你可以根据自己的场景选:

方案一:前端临时存储路由ID(最简单直接)

因为是同一页面的标签切换,完全可以在前端把选中的路由ID存起来,切换标签时直接调用。推荐用sessionStorage(会话级存储,关闭浏览器才清空)或者全局变量,步骤如下:

1. 修改前端jQuery代码,存储ID并触发查询

$(document).ready(function () {
    $(".collection-routeselection").click( function(){
        route_id = $(this).attr("value");
        // 把路由ID存到sessionStorage,页面刷新也不会丢
        sessionStorage.setItem("selectedRouteId", route_id);

        jQuery.ajax({
            // 注意:原来的URL有两个?,这是错误的,要改成&
            url: '../data/collecting.php?action=route-selection&routeid='+route_id,
            type: 'POST',
            dataType: 'text',
            data: {'routeid':route_id},
            success: function(data, textStatus, jqXHR) {
                $("#tab1").removeClass("active");
                $("#tab2").addClass("active");
                // 切换到tab2后立刻加载路由详情
                loadRouteDetails();
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert("An error occured when saving the data");
            }
        });
    });

    // 定义加载路由详情的函数
    function loadRouteDetails() {
        var selectedId = sessionStorage.getItem("selectedRouteId");
        if (!selectedId) return;

        // 发起AJAX请求到PHP获取详情
        $.ajax({
            url: '../data/get-route-details.php',
            type: 'POST',
            data: {'routeid': selectedId},
            dataType: 'json',
            success: function(response) {
                // 把返回的结果渲染到tab2的页面元素里
                // 示例:$("#route-id-display").text(response.id_rou);
                // $("#job-type-display").text(response.idjtp_job);
            },
            error: function() {
                alert("Failed to load route details");
            }
        });
    }

    // 监听tab切换事件,切换到tab2时自动加载数据
    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        var targetTab = $(e.target).attr("href");
        if (targetTab === "#tab2") {
            loadRouteDetails();
        }
    });

    // 如果页面加载时tab2已经激活,直接加载数据
    if ($("#tab2").hasClass("active")) {
        loadRouteDetails();
    }
});

2. 编写PHP接口get-route-details.php执行查询

<?php
// 引入你的数据库连接文件
include('db-connection.php');

if (isset($_POST['routeid'])) {
    $rouid = $_POST['routeid'];
    // 执行你的查询语句,绑定路由ID参数
    $select_stmt = mysqli_prepare($mysqli_scs, "SELECT id_rou,idjtp_job FROM routes_rou WHERE id_rou = ?");
    mysqli_stmt_bind_param($select_stmt, "i", $rouid);
    mysqli_stmt_execute($select_stmt);
    $result = mysqli_stmt_get_result($select_stmt);
    $routeDetails = mysqli_fetch_assoc($result);

    // 返回JSON格式的数据给前端
    echo json_encode($routeDetails);
    mysqli_stmt_close($select_stmt);
} else {
    echo json_encode(['error' => 'No route ID provided']);
}
?>

方案二:从数据库读取最新选中的路由ID

如果担心前端存储的ID和数据库不一致,或者需要支持页面刷新后恢复状态,可以直接从你已经存储的collectiontracking_ctr表中读取最新的记录:

1. 编写PHP接口get-latest-route.php

<?php
include('db-connection.php');

// 先查询最新选中的路由ID(按修改时间倒序取第一条)
$select_latest = mysqli_prepare($mysqli_scs, "SELECT idrou_ctr FROM collectiontracking_ctr ORDER BY modified_ctr DESC LIMIT 1");
mysqli_stmt_execute($select_latest);
$result = mysqli_stmt_get_result($select_latest);
$latestRoute = mysqli_fetch_assoc($result);

if ($latestRoute) {
    $rouid = $latestRoute['idrou_ctr'];
    // 再执行路由详情查询
    $select_stmt = mysqli_prepare($mysqli_scs, "SELECT id_rou,idjtp_job FROM routes_rou WHERE id_rou = ?");
    mysqli_stmt_bind_param($select_stmt, "i", $rouid);
    mysqli_stmt_execute($select_stmt);
    $routeDetails = mysqli_fetch_assoc(mysqli_stmt_get_result($select_stmt));

    echo json_encode($routeDetails);
    mysqli_stmt_close($select_stmt);
} else {
    echo json_encode(['error' => 'No selected route found']);
}
mysqli_stmt_close($select_latest);
?>

2. 修改前端loadRouteDetails函数

不需要传ID,直接请求这个接口即可:

function loadRouteDetails() {
    $.ajax({
        url: '../data/get-latest-route.php',
        type: 'GET',
        dataType: 'json',
        success: function(response) {
            // 渲染数据到tab2
        },
        error: function() {
            alert("Failed to load route details");
        }
    });
}

方案三:服务器端渲染tab2内容

如果你的tab2内容是服务器端生成的,可以在AJAX成功后直接把路由ID作为参数加载tab2的内容:

success: function(data, textStatus, jqXHR) {
    $("#tab1").removeClass("active");
    $("#tab2").addClass("active");
    // 加载tab2的内容,带上路由ID参数
    $("#tab2-content").load('../data/tab2-content.php?routeid='+route_id);
}

对应的tab2-content.php:

<?php
include('db-connection.php');

$rouid = "";
if (isset($_GET['routeid'])) {
    $rouid = $_GET['routeid'];
}

$select_stmt = mysqli_prepare($mysqli_scs, "SELECT id_rou,idjtp_job FROM routes_rou WHERE id_rou = ?");
mysqli_stmt_bind_param($select_stmt, "i", $rouid);
mysqli_stmt_execute($select_stmt);
$result = mysqli_stmt_get_result($select_stmt);
$route = mysqli_fetch_assoc($result);

// 直接输出HTML内容
if ($route) {
    echo "<p>Route ID: " . htmlspecialchars($route['id_rou']) . "</p>";
    echo "<p>Job Type ID: " . htmlspecialchars($route['idjtp_job']) . "</p>";
} else {
    echo "<p>No route details found</p>";
}
?>

注意事项

  • 务必处理路由ID不存在的情况,避免SQL错误或前端显示异常
  • 前端存储时,sessionStorage是会话级,localStorage会永久保存,根据需求选择
  • 原AJAX URL的参数格式错误,要把?action=route-selection?routeid=改成?action=route-selection&routeid=,否则第二个参数无法被正确识别

内容的提问来源于stack exchange,提问作者Luke Brough

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:17:05