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

Ajax刷新后<div>数据不显示问题求助

解决
更新数据库后不显示最新数据的问题

嘿,我帮你分析下这个

更新后不显示数据的问题,大概率是前端没同步数据库的更新状态,或者模板渲染有小问题,咱们一步步来排查:

1. 核心问题:服务器渲染 vs 前端动态更新

你用的是Laravel Blade的@foreach循环,这属于服务器端渲染——页面加载时就把数据库当时的数据渲染好了。当你通过changeComposer函数更新数据库后,前端页面不会自动刷新数据,因为浏览器没重新请求服务器获取最新列表。

2. 先补全changeComposer的前端同步逻辑

你的函数只完成了「更新数据库」这一步,缺了前端UI同步的操作。可以在请求成功后,直接修改DOM或者重新拉取最新数据:

示例修改后的changeComposer函数

function changeComposer(newActive, composerId) {
    // 发送POST请求更新数据库(替换成你的实际接口地址)
    fetch(`/composers/${composerId}/update-active`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            // 确保页面里有<meta name="csrf-token" content="{{ csrf_token() }}">,Laravel需要这个令牌
            'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
        },
        body: JSON.stringify({ active: newActive })
    })
    .then(res => res.json())
    .then(result => {
        if (result.success) {
            // 方式1:直接定位条目并修改显示状态(推荐,无需重新加载整个列表)
            const targetItem = document.querySelector(`[data-composer-id="${composerId}"]`);
            if (targetItem) {
                // 因为你的模板只渲染active=1的条目,设置为0后直接移除/隐藏即可
                if (newActive === '0') {
                    targetItem.remove();
                }
            }

            // 方式2:重新加载整个列表(适合数据变化复杂的场景)
            // fetch('/composers/received-list')
            // .then(res => res.text())
            // .then(html => {
            //     document.getElementById('receivedHere').innerHTML = html;
            // });
        }
    })
    .catch(err => console.error('更新失败:', err));
}

3. 修复Blade模板的两个小问题

你的模板有截断和语法错误,会影响渲染效果:

  • 给每个条目加唯一标识属性,方便前端定位元素;
  • 修正@else的语法错误(@else后面不能跟条件):
<div class="tab-pane active" id="receivedHere" style="width: 100%;">
    @foreach($compose as $item) {{-- 变量名别重复用$compose,避免混淆 --}}
        @if($item->active == 1)
            <!-- 给每个条目加唯一标识 -->
            <div class="composer-entry" data-composer-id="{{ $item->id }}">
                <!-- 你的内容 -->
                <input type="hidden" value="{{ $item->id }}">
                <img src="/public/images/EyePublic.svg" onclick="changeComposer('0','{{ $item->id }}')">
                <!-- 其他内容 -->
            </div>
        @endif
        <!-- @else不需要加条件,不需要处理的话可以直接删掉这个分支 -->
        {{-- @else
            <!-- 这里放active≠1时的内容 -->
        @endif --}}
    @endforeach
</div>

4. 额外排查点

  • 确认数据库真的更新了:去数据库里查对应条目的active字段,是不是已经改成目标值了?
  • 检查浏览器控制台:有没有AJAX请求失败的报错?比如CSRF令牌错误、接口地址写错?
  • 清理Laravel缓存:如果刷新页面后还是不显示,试试执行php artisan view:clear和php artisan route:clear清除视图/路由缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:40:52