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

如何将MySQL数据传入Javascript的drawNetwork()函数实现可视化

我来帮你一步步解决这个问题,把MySQL里的关联数据传到vis.js的可视化函数里其实分几个关键步骤,咱们结合你给的示例代码来调整:

1. 后端先把MySQL数据转成JSON格式

首先你需要一个后端接口(这里用PHP举例,它和MySQL搭配是最常见的组合),用来从数据库查询节点和关联关系,再输出成前端能识别的JSON格式。比如创建一个get_network_data.php文件:

<?php
// 替换成你的数据库连接信息
$servername = "localhost";
$username = "你的数据库用户名";
$password = "你的数据库密码";
$dbname = "你的数据库名";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 查询所有节点数据(假设你的节点表叫nodes,有id和name字段)
$nodes_sql = "SELECT id, name FROM nodes";
$nodes_result = $conn->query($nodes_sql);
$nodes = [];
while($row = $nodes_result->fetch_assoc()) {
    $nodes[] = [
        "id" => $row['id'],
        "label" => $row['name'],
        "shape" => "box"
    ];
}

// 查询所有关联关系(假设你的关系表叫edges,有from_id, to_id, description字段)
$edges_sql = "SELECT from_id, to_id, description FROM edges";
$edges_result = $conn->query($edges_sql);
$edges = [];
while($row = $edges_result->fetch_assoc()) {
    $edges[] = [
        "from" => $row['from_id'],
        "to" => $row['to_id'],
        "label" => $row['description'],
        "arrows" => ["to" => true]
    ];
}

// 输出JSON格式的数据
header('Content-Type: application/json');
echo json_encode([
    "nodes" => $nodes,
    "edges" => $edges
]);

$conn->close();
?>
2. 前端修改代码,通过AJAX获取动态数据

原来的drawNetwork函数里的节点和关系是硬编码的,现在我们把它改成可以接收动态数据的形式,然后在模态框弹出时,先请求后端数据再调用绘图函数:

// 改写drawNetwork,让它接收nodes和edges参数
function drawNetwork(nodes, edges) {
    var container = document.getElementById('network-container');
    var data = { nodes: nodes, edges: edges };
    var width = 600;
    var height = 500;
    var options = {
        width: width + 'px',
        height: height + 'px',
        edges: { smooth: false },
        physics: false,
        interaction: {
            hover: true,
            dragNodes: true,
            zoomView: false,
            dragView: false
        }
    };
    var network = new vis.Network(container, data, options);
}

// 修改模态框的显示事件,先请求数据再绘图
$('#model4temp').on('shown.bs.modal', function() {
    // 用jQuery的AJAX请求后端接口
    $.ajax({
        url: 'get_network_data.php', // 刚才写的后端文件路径
        method: 'GET',
        dataType: 'json',
        success: function(response) {
            // 请求成功后,把后端返回的数据传入drawNetwork
            drawNetwork(response.nodes, response.edges);
        },
        error: function(xhr, status, error) {
            console.error('获取数据失败:', error);
            alert('加载网络数据失败,请检查后端接口');
        }
    });
});
3. 进阶:针对单条数据显示关联关系

如果你的按钮需要点击后只显示当前数据的关联(比如点击Data1的按钮只展示Data1相关的节点和关系),可以给按钮加一个data-id属性:

<input type="button" data-toggle="modal" data-target='#model4temp' data-id="1" value="View" class="btn btn-success btn-md">

然后修改前端AJAX请求,把这个ID传给后端:

$('#model4temp').on('shown.bs.modal', function(e) {
    // 获取点击按钮对应的data-id
    var targetId = $(e.relatedTarget).data('id');
    $.ajax({
        url: 'get_network_data.php',
        method: 'GET',
        data: { target_id: targetId }, // 把ID传给后端
        dataType: 'json',
        success: function(response) {
            drawNetwork(response.nodes, response.edges);
        }
    });
});

最后在后端的SQL查询里加上WHERE条件,只查询和当前ID相关的节点与关系即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:20:03