如何在PHP MVC架构下去除Ajax返回JSON响应中的多余HTML标签
问题原因
MVC框架默认会在控制器逻辑执行完成后自动加载布局、视图模板(比如公共页头、页脚、导航等HTML内容),你在模型中输出JSON后没有终止程序,框架后续的视图渲染逻辑就会把HTML内容追加到JSON后面,导致响应格式异常。
解决步骤
- 输出JSON后立即终止程序执行,阻止后续视图渲染
- 主动设置JSON格式的响应头,避免客户端或框架自动注入额外内容
- 排查全局公共加载逻辑、钩子函数,给JSON接口跳过HTML视图加载的规则
- 清空输出缓冲区,避免提前输出的空格、报错信息混入响应
修改后的代码示例
调整后的模型方法
public function select(){ $select_query = $this->db->prepare("SELECT * FROM table_name"); $select_query->execute(); $row = $select_query->fetchAll(PDO::FETCH_ASSOC); // 清空之前的输出缓冲区 ob_clean(); // 设置JSON响应头 header('Content-Type: application/json; charset=utf-8'); echo json_encode($row, JSON_UNESCAPED_UNICODE); // 终止程序,防止后续输出HTML exit; }
调整后的控制器逻辑(也可以在控制器层做终止处理)
$dashboard = new obj(); // 实例化包含select方法的模型类 ob_clean(); header('Content-Type: application/json; charset=utf-8'); $dashboard->select(); exit;
额外排查点
如果修改后还是有多余内容,检查代码中是否有其他echo、var_dump等打印语句,同时关闭接口场景下的display_errors配置,避免PHP报错、警告信息混入响应内容。
内容的提问来源于stack exchange,提问作者Abolfazl Rajabloo
相关产品推荐
相关产品推荐

