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

Ajax删除请求返回200却触发Error,JSON响应含多余ID求助

问题解决:Ajax返回200却触发error回调,响应前附加用户ID

核心问题分析

从控制台日志xhr.responseText = 49{"success":true}可以明确:后端在输出JSON响应前,意外输出了要删除的用户ID(49),导致返回的内容不是合法JSON,jQuery的dataType: 'json'解析失败,因此触发error回调,哪怕HTTP状态码是200。

前端按钮的渲染逻辑(不管是PHP formatter还是JS重写)只是获取ID并发起请求,不会导致后端响应附加ID,问题完全出在后端代码的输出环节。

解决方案步骤

1. 排查后端所有可能的意外输出

检查remove_user.php以及它引入的所有依赖文件(比如初始化$c_eta的类文件、配置文件等),重点找以下场景:

  • 是否在echo json_encode($form_data);之前,存在echo $_POST['id'];、print($id);这类主动输出ID的代码
  • 检查$c_eta->_get_user_info()或$c_eta->_remove_user()方法内部,是否有调试用的var_dump()、echo语句
  • 检查PHP文件的开头/结尾,是否有<?php标签外的空格、换行、注释(这些也会被当作输出内容)

2. 强制清空输出缓冲区(临时快速修复)

如果暂时找不到输出源,可以在remove_user.php最顶部添加缓冲区控制代码,确保只有JSON响应被输出:

<?php
ob_start(); // 开启输出缓冲区

// 原有的代码逻辑
if($_POST['form_process'] == 'Remove User') {
    $training_info = $c_eta->_get_user_info($_POST['id']);
    if (count($training_info) > 0) {
        if ($c_eta->_remove_user($_POST['id'])) {
            $form_data['success'] = true;
        } else {
            $form_data['success'] = false;
            $form_data['errors'] = "Unable to remove user";
        }
        ob_end_clean(); // 清空缓冲区所有多余输出
        header('Content-Type: application/json');
        echo json_encode($form_data);
        exit; // 终止脚本,避免后续代码输出
    }
}

注意:用exit替代return,确保脚本执行到JSON输出后立刻终止,避免后续可能的输出。

3. 验证修复结果

发起删除请求后,查看浏览器开发者工具的「网络」面板,检查响应内容是否为纯{"success":true},没有任何前缀。此时jQuery就能正常解析JSON,进入success回调。

补充说明

把dataType改为text后进入success回调,但data.errors报错,是因为此时data是字符串"49{"success":true}",不是JSON对象,自然没有errors属性。核心还是要保证后端输出合法的JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:44:52