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

Datatable首次触发change事件AJAX正常,后续报无法重新初始化错误如何解决?

DataTable重复初始化报错解决方法

错误原因

报错是因为每次select的change事件触发时,都会重复对同一个#example表格执行DataTable初始化操作,且你错误地将destroy、retrieve、paging、searching这些DataTable的顶级配置参数放在了ajax配置项内部,导致配置不生效,才会触发重复初始化的错误。


解决方案

方案1:调整配置参数位置,每次触发时销毁旧实例后重建

适合切换下拉框时需要修改表格列定义的场景,只需要将原本放在ajax内部的顶级配置移到外层即可:

$("#formulaId").change(function () {
    var popup, dataTable;
    var entity = 'Quote';
    var apiurl = '/api/' + entity + '/index';
    var formulaId = $('#formulaId').val();

    var table = $('#example').DataTable({
        destroy: true, // 移到顶级配置
        retrieve: true,
        paging: false,
        searching: false,
        "ajax": {
            "url": apiurl + '/' + formulaId,
            "type": 'GET',
            "datatype": 'json'
        },
        // 保留你原有columns配置不变
        columns: [
            { title: "Item Key", data: "itemKey" },
            { title: "Description", data: "description" },
            { title: "Pounds", data: "pound" },
            { title: "Current Cost", data: "cost" },
            {
                title: "New Cost", data: "cost",
                "render": function (data, type, row) {
                    return '<input type="number" class ="price-input"  value="' + data + '" style="background-color:lightgoldenrodyellow;">';
                }
            },
            { title: "Unit", data: "unit" },
            {
                title: "Quantity", data: "quantity"
            },
            {
                title: "Total", data: function (data, type, row) {
                    return '<input type="number" readonly  value="' + data.totalCost + '" style="background-color:lightgoldenrodyellow;">';
                }
            },
            {
                title: "New Total", "data": "totalCost",
                "render": function (data, type, row) {
                    return '<input type="number" readonly class ="price-input"  value="' + data + '" style="background-color:lightgoldenrodyellow;">';
                }
            }
        ]
    });
});

方案2(更推荐):全局仅初始化一次表格,change事件仅重载数据

性能更高,不需要反复销毁重建表格实例,代码调整如下:

// 全局声明表格实例
var table;
// 页面加载完成后先初始化一次Datatable
$(function(){
    var entity = 'Quote';
    var apiurl = '/api/' + entity + '/index';
    table = $('#example').DataTable({
        paging: false,
        searching: false,
        "ajax": {
            // 初始地址可根据你页面默认选中的下拉框值调整
            "url": apiurl + '/',
            "type": 'GET',
            "datatype": 'json'
        },
        // 原有columns配置不变
        columns: [
            { title: "Item Key", data: "itemKey" },
            { title: "Description", data: "description" },
            { title: "Pounds", data: "pound" },
            { title: "Current Cost", data: "cost" },
            {
                title: "New Cost", data: "cost",
                "render": function (data, type, row) {
                    return '<input type="number" class ="price-input"  value="' + data + '" style="background-color:lightgoldenrodyellow;">';
                }
            },
            { title: "Unit", data: "unit" },
            {
                title: "Quantity", data: "quantity"
            },
            {
                title: "Total", data: function (data, type, row) {
                    return '<input type="number" readonly  value="' + data.totalCost + '" style="background-color:lightgoldenrodyellow;">';
                }
            },
            {
                title: "New Total", "data": "totalCost",
                "render": function (data, type, row) {
                    return '<input type="number" readonly class ="price-input"  value="' + data + '" style="background-color:lightgoldenrodyellow;">';
                }
            }
        ]
    });
})

// 下拉框change事件仅更新ajax地址重载数据
$("#formulaId").change(function () {
    var entity = 'Quote';
    var apiurl = '/api/' + entity + '/index';
    var formulaId = $('#formulaId').val();
    // 直接更新url重载数据,不需要重新初始化
    table.ajax.url(apiurl + '/' + formulaId).load();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:36:03