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

Laravel渲染视图返回JSON含 致Ajax替换HTML异常问题

解决Laravel Ajax返回渲染视图时出现转义换行符的问题

这个问题的核心原因有两个:一是你手动使用json_encode返回HTML字符串,Laravel会将其作为普通文本响应返回,导致jQuery无法正确解析JSON;二是视图渲染后的HTML包含的换行符被JSON转义成\n,最终在页面上显示为可见字符。

下面是几个可行的解决方案:

1. 使用Laravel的response()->json()返回响应

不要手动调用json_encode,改用Laravel内置的JSON响应方法,它会自动设置正确的Content-Type响应头,让jQuery正确解析返回的内容:

// 控制器代码修正
$view = view('renderedData', [
    'test' => $data['test'], 
    'unicorn' => $data['unicorn'],
])->render();
return response()->json($view);

同时可以在Ajax请求中显式指定dataType: 'json',确保前端正确解析:

function sendData() {
 var test= "test data"
 var dummy = "unicorn whatever"
 $.ajax({
 type: "post",
 url: "{{ route('ajaxRender') }}",
 data: {'test': test, 'dummy': dummy},
 dataType: 'json', // 新增这一行
 success: function (data) {
 $('tbody').replaceWith(data)
 }
 });
}

2. 压缩渲染后的HTML(可选但推荐)

为了避免HTML中的多余换行、空格导致的问题,可以在返回前压缩HTML内容,去掉不必要的空白字符:

$view = view('renderedData', [...])->render();
// 压缩HTML,替换所有多余的空白、换行、制表符
$compressedHtml = preg_replace('/(\s+|\n|\r|\t)/', ' ', trim($view));
return response()->json($compressedHtml);

3. 修正Blade视图中的变量错误

注意到你的Blade视图里有个明显的笔误:@foreach($data as $d)循环中使用的是$c->name,应该改为$d->name,同时变量引用不需要额外加$符号包裹,否则渲染时会抛出错误:

<tbody>
 @foreach($data as $d)
 <tr>
 <td>{{ $d->name }}</td> <!-- 把$c改成$d -->
 <td>{{ $d->date }}</td> <!-- 移除变量名前的$ -->
 <td>{{ $d->height }}</td>
 </tr>
 @endforeach
 </tbody>

这样处理后,返回的HTML就不会再显示\n这类转义字符,表格内容也能正常渲染了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:29:24