Laravel中AJAX获取JSON数据后无法渲染为HTML表格,仅显示原始JSON数据的问题排查
Laravel中AJAX获取JSON数据后无法渲染为HTML表格,仅显示原始JSON数据的问题排查
看起来你遇到的问题有点典型,咱们一步步拆解排查,很快就能解决:
一、先搞清楚核心逻辑:别直接访问返回JSON的路由
你的admin_finish.index路由对应的FinishController@index方法,作用就是返回纯JSON数据——如果你直接在浏览器地址栏输入这个路由的URL,浏览器肯定只会显示原始JSON,这是完全正常的!
你需要调整的是:
- 新增一个专门用来返回表格页面的路由,比如在
web.php中添加:
Route::get('admin/finishes', function() { // 替换成你实际的blade视图文件名(比如你的表格视图是resources/views/admin/finishes.blade.php) return view('admin.finishes'); })->name('admin.finishes.page');
- 之后在浏览器中访问这个
admin/finishes路由,这个页面会加载你的表格模板,再通过AJAX去请求admin_finish.index获取JSON数据填充表格。
二、修复JavaScript代码里的3个关键错误
你的JS脚本有几个语法和逻辑问题,直接导致AJAX无法正常工作:
1. 语法错误:缺少逗号
AJAX配置里dataType: 'json'后面没加逗号,会导致JavaScript解析失败,整个fetchData函数直接罢工:
// 错误写法 dataType: 'json' success: function(data) { ... } // 正确写法 dataType: 'json', success: function(data) { ... }
2. 遍历对象错误:要遍历data.finishes而非data
你的控制器返回的是response()->json(['finishes' => $finishes]),所以AJAX拿到的data结构是{ finishes: [数组数据] }。你现在直接遍历data是错的,得遍历data.finishes:
// 错误写法 $.each(data, function(key, finishes) { ... }) // 正确写法 $.each(data.finishes, function(key, finish) { rows += ` <tr> <td>${key + 1}</td> <!-- 用key+1生成自增序号 --> <td>${finish.name}</td> <td> <button data-id="${finish.id}" class="btn btn-primary btn-sm edit-post"><i class="fa fa-edit"></i></button> <button data-id="${finish.id}" class="btn btn-danger btn-sm delete-post"><i class="fa fa-trash"></i></button> </td> </tr> `; })
3. 拼写错误:js_scirpts → js_scripts
你的blade里写的是@section('js_scirpts'),如果母模板admin.index中定义的脚本区块是正确拼写的js_scripts,那这个section的内容根本不会被加载,AJAX代码自然不会执行,赶紧改过来:
@section('js_scripts') <script> // ... 你的AJAX代码 </script> @endsection
三、验证排查的小技巧
打开浏览器开发者工具(F12):
- 看Console标签:有没有JavaScript语法报错(比如之前的逗号缺失会在这里提示)。
- 看Network标签:刷新页面后,检查是否有
admin_finish.index的AJAX请求,查看请求状态码(200是正常)和响应数据是否符合预期。
四、额外小提醒
- 确保母模板
admin.index已经引入了jQuery,否则$会报未定义错误。 - 确保页面头部有CSRF meta标签:
<meta name="csrf-token" content="{{ csrf_token() }}">
按照这些步骤调整后,应该就能正常渲染表格了!
内容来源于stack exchange
相关产品推荐
相关产品推荐

