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

嵌套Ajax调用中.when()用法问题(jQuery/DataTables/WordPress)

问题分析与解决方案

你的核心问题是DataTables初始化(包括其内部的Ajax数据加载)是异步操作,但当前代码在调用loading_table后立刻执行tooltip初始化,此时表格还未渲染完成,tooltip绑定的元素尚不存在,导致初始化无效。你尝试用$.when但没效果,是因为loading_table没有返回可被识别的Promise对象。

步骤1:改造loading_table,返回Promise

修改loading_table函数,让它返回一个Promise,并在DataTables的initComplete回调中resolve这个Promise——initComplete会在表格完全加载数据、渲染完成后触发,这正是我们需要等待的时机。

function loading_table(typeTable) {
    // 返回Promise对象
    return new Promise((resolve) => {
        switch(typeTable) {
            case 'clienti':
                var dt_basic_table_customer = $('.datatables-basic-customer');
                if (dt_basic_table_customer.length) {
                    dt_basic_table_customer.DataTable({
                        ajax:{
                            url: myAjax.ajax_url + '?action=tabella_clienti',
                            cache: false,
                        },
                        columns: [
                            // 你的列配置
                        ],
                        columnDefs: [
                            // 你的列定义
                        ],
                        // 表格完全初始化完成后resolve Promise
                        initComplete: function() {
                            resolve();
                        }
                    });
                } else {
                    // 未找到表格元素时直接resolve
                    resolve();
                }
                break;
            default:
                // 其他表格类型同理,或直接resolve
                resolve();
        }
    });
}

步骤2:等待所有表格加载完成后初始化tooltip

利用Promise.all等待所有表格的Promise执行完成,再统一初始化tooltip,确保tooltip绑定的元素已存在于DOM中。

修改refresh_content中的对应代码块:

if(table.length) {
    // 收集所有表格加载的Promise
    const tablePromises = [];
    $(table).each(function(index){
        var typeTable = $(this).data('table');
        tablePromises.push(loading_table(typeTable));
    });
    
    // 等待所有表格渲染完成
    Promise.all(tablePromises).then(() => {
        console.log('所有表格加载完成');
        // 先销毁旧tooltip实例(避免重复初始化冲突),再重新初始化
        $('[data-bs-toggle="tooltip"]').tooltip('dispose').tooltip();
    });
}

额外提示

检查你的代码是否已经将response.content正确插入到页面DOM中——当前代码仅做了$('<div/>').html(response.content).find('.datatable'),但未将新页面内容挂载到页面,这会导致后续表格和tooltip操作找不到目标元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:52:43