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

Laravel视图中如何将Ajax数据绑定到@foreach实现表格局部刷新

解决Ajax返回数据无法更新Blade表格的问题

你遇到的核心问题是Blade的@foreach是服务器端渲染的,页面加载完成后就已经生成了静态HTML,所以Ajax拿到新数据后,没法直接用Blade语法来循环渲染。我们需要用JavaScript动态构建表格的行,替换掉原来的内容。下面是具体的解决方案:


步骤1:优化表格结构,方便后续操作

首先给表格的数据区域添加一个带ID的<tbody>标签,这样我们可以精准定位并清空原有数据:

<table class="table table-bordered" id="loan_table">
 <thead>
 <tr>
 <th>No</th>
 <th>Borrower No</th>
 <th>Loan Stage</th>
 <th>Loan Amount</th>
 <th>Release Date</th>
 <th width="200px">Action</th>
 </tr>
 </thead>
 <!-- 添加带ID的tbody,用于后续更新数据 -->
 <tbody id="loan_table_body">
 @foreach ($loans as $loan)
 <tr>
 <td>{{ ++$i }}</td>
 <td>{{ $loan->borrower_no }}</td>
 <td>{{ $loan->loan_stage }}</td>
 <td>{{ $loan->loan_amount }}</td>
 <td>{{ $loan->release_date }}</td>
 <td width="100px">
 <form action="{{ route('approving.destroy',$loan->borrower_no) }}" method="POST">
 <a class="btn btn-info btn-sm" href="{{ route('approving.show',$loan->borrower_no) }}">Details of Borrower</a>
 <a class="btn btn-success btn-sm" href="/approving/test/{{$loan->borrower_no}}">Approve</a>
 @csrf
 @method('DELETE')
 <button type="submit" class="btn btn-danger btn-sm">Reject</button>
 </form>
 </td>
 </tr>
 @endforeach
 </tbody>
</table>

步骤2:修正Ajax代码,动态生成表格行

你的原有Ajax代码存在几个问题:绑定事件对象不对、HTML拼接语法错误、缺少表单默认行为阻止。下面是修正后的完整代码:

@section('scripts')
<script type="text/javascript">
$(document).ready(function () {
    // 绑定搜索按钮的点击事件,替换原来的group_selector点击
    $('button[type="submit"]').click(function (e) {
        e.preventDefault(); // 阻止表单默认提交,避免页面刷新
        
        // 获取所有筛选条件的值
        var branch = $('#branch_selector').val();
        var center = $('#center_selector').val();
        var group = $('#group_selector').val();
        
        $.ajax({
            type: 'GET',
            url: '{{ url('/gseclector') }}',
            data: {
                'branch': branch,
                'center': center,
                'id': group // 参数名要和后端接口接收的一致
            },
            dataType: 'JSON',
            success: function (data) {
                // 先清空表格原有数据
                $('#loan_table_body').empty();
                
                // 遍历返回的筛选数据,生成每一行HTML
                data.forEach(function(item, index){
                    // 动态生成路由链接,保证权限和路径正确
                    var showUrl = '{{ route('approving.show', ':borrower_no') }}'.replace(':borrower_no', item.borrower_no);
                    var approveUrl = '/approving/test/' + item.borrower_no;
                    var deleteUrl = '{{ route('approving.destroy', ':borrower_no') }}'.replace(':borrower_no', item.borrower_no);
                    
                    // 用ES6模板字符串拼接表格行
                    var rowHtml = `<tr>
                        <td>${index + 1}</td>
                        <td>${item.borrower_no}</td>
                        <td>${item.loan_stage}</td>
                        <td>${item.loan_amount}</td>
                        <td>${item.release_date}</td>
                        <td width="100px">
                            <form action="${deleteUrl}" method="POST">
                                <a class="btn btn-info btn-sm" href="${showUrl}">Details of Borrower</a>
                                <a class="btn btn-success btn-sm" href="${approveUrl}">Approve</a>
                                @csrf
                                @method('DELETE')
                                <button type="submit" class="btn btn-danger btn-sm">Reject</button>
                            </form>
                        </td>
                    </tr>`;
                    
                    // 将生成的行添加到表格中
                    $('#loan_table_body').append(rowHtml);
                });
            },
            error: function(xhr){
                console.error('筛选请求出错:', xhr.responseText);
            }
        });
    });
});
</script>
@endsection

关键细节说明

  1. 阻止默认提交:因为按钮是type="submit",点击会触发表单跳转,所以用e.preventDefault()强制改用Ajax请求,实现局部刷新。
  2. 动态路由生成:利用Blade的route()生成带占位符的URL,再用JS替换成实际的borrower_no,保证链接的正确性和安全性。
  3. 清空原有数据:每次请求成功后先清空表格内容,避免新旧数据叠加。
  4. 模板字符串:用`包裹的模板字符串让HTML拼接更清晰,避免繁琐的字符串拼接错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:07:43