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

jQuery Ajax设置dataType为json时success回调不生效问题

问题成因

你遇到的问题由两个独立的低级错误共同导致:

  • 前端Ajax配置的成功回调名拼写错误:你写的是succes,正确写法是success(少写了末尾的s)。jQuery无法识别拼写错误的配置项,所以哪怕后端返回完全合法的JSON,成功回调也永远不会被触发,这就是你观察到“纯输出JSON时success内alert完全不执行”的核心原因。
  • 后端PHP输出不符合JSON规范:你在返回JSON前额外执行了echo "true";,最终响应内容是true{"status":"OK","nombre":"xxx"...}这类拼接字符串,不是合法JSON格式。jQuery配置dataType: 'json'时会自动对响应做JSON解析,遇到这种非法格式就会抛出你看到的SyntaxError异常,直接进入error回调;如果响应中夹杂其他非JSON内容,jQuery解析失败后会将响应识别为普通文本/HTML,自然无法正常读取结构化业务数据。

额外隐患:你当前PHP代码把查询结果放在while循环中输出,如果查询命中多条记录,会连续输出多段JSON字符串拼接的内容,同样属于非法JSON格式,会触发解析错误。另外当前SQL语句直接拼接用户传入的rfc参数,存在严重SQL注入风险。

修复方案

前端代码修正

将拼写错误的回调名修正为success即可,修正后代码如下:

$(document).on("click", "#btnEditarInstructor", function(event) {
  event.preventDefault();
  let rfc = $(this).attr("value");
  $.ajax({
    type: "POST",
    url: "../utils/ajax/ajax_consulta_instructor.php",
    data: {
      rfc: rfc,
    },
    dataType: "json",
    // 修正此处拼写错误
    success: function(response) {
      console.log(response);
      // 后续业务逻辑写在这里
      if (response.status === 'OK') {
        // 正常处理返回的讲师数据
      }
    },
    error: function(request, status, error) {
      console.log("解析错误", request.responseText, status, error);
    },
  });
})

后端PHP代码修正

核心原则:JSON接口只能输出唯一一段合法JSON字符串,不能有任何额外输出(包括echo的零散字符、PHP报错信息、BOM头、HTML标签等)。建议在输出前明确声明JSON响应头,同时修复SQL注入隐患、避免循环多次输出,修正后代码参考:

<?php
// 明确声明JSON响应头
header('Content-Type: application/json; charset=utf-8');

$rfc = $_POST['rfc'];
// 建议改用PDO或mysqli预处理语句,此处仅为示例修复逻辑
$sql = "SELECT * FROM instructores WHERE rfc = '$rfc'";
$sql_run = mysqli_query($con, $sql);

$datos = [];
// 单条查询不需要while循环,直接取一次结果即可
if ($row = mysqli_fetch_array($sql_run)) {
  $datos['status'] = 'OK';
  $datos['nombre'] = $row['nombre'];
  $datos['apellidos'] = $row['apellidos'];
  $datos['email'] = $row['email'];
  $datos['tipo_promotor'] = $row['tipo_promotor'];
} else {
  $datos['status'] = 'ERROR';
  $datos['msg'] = '未查询到对应讲师信息';
}

// 所有逻辑处理完后,统一输出一次JSON
echo json_encode($datos);
exit;
?>

注意:上线前请务必将SQL拼接写法替换为预处理参数绑定写法,避免SQL注入漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:57:13