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

如何修复Uncaught SyntaxError: Unexpected token _ in JSON错误?

解决AJAX请求后JSON.parse的Unexpected token错误

首先,咱们直接揪出最核心的问题:你前端的JSON解析逻辑完全搞错了,这才导致了控制台的语法错误。

为什么会报错?

你后端通过json_encode返回的是单个JSON对象(就像你给出的示例那样),但前端却做了两个错误操作:

  1. 用$.each去遍历这个单一对象——这会把对象的每个属性(比如note_record、deleted_status)拆成键值对来循环;
  2. 在循环里又对属性值(比如字符串"1_5cdb7ad317291.jpeg")调用JSON.parse,这个字符串根本不是有效的JSON格式,自然会抛出Unexpected token _的错误。

修复步骤

第一步:修正前端AJAX逻辑

直接去掉多余的遍历和重复解析,让jQuery自动帮你处理JSON:

$("[id^='deleteNotes']").click(function() { 
  var id = $(this).closest('div').attr('id'); 
  console.log(id); 
  $.ajax({ 
    url: "ajax/deleteidentifier.php", 
    type: "post", 
    data: { id_delete: id },
    // 关键:告诉jQuery自动解析返回的JSON,不用手动parse
    dataType: "json"
  }) 
  .done(function(result) { 
    // 这里的result已经是解析好的JavaScript对象了
    if (result.deleted_status === "n") { 
      alert("Moved to deleted folder."); 
      window.location.reload(); 
    } else { 
      alert("Note permanently deleted!"); 
      window.location.reload(); 
    } 
  })
  // 加上错误回调,方便后续排查问题
  .fail(function(xhr, status, error) {
    console.error("AJAX请求出错:", error);
    console.error("服务器返回内容:", xhr.responseText);
  }); 
});

第二步:修复PHP代码的潜在问题

你的PHP代码还有两个严重问题,不仅可能导致JSON错误,还存在安全风险:

  1. SQL注入风险:直接把用户输入拼接到SQL语句里,这是高危操作;
  2. JSON输出不纯净:没有明确设置响应头,可能混入额外输出(比如警告、空格)破坏JSON格式。

修改后的PHP代码:

<?php 
include_once("../db.php"); 
include "../session.php"; 

$result_query_sql_deletedStatus_notes = [];
if (isset($_POST["id_delete"])) { 
  // 使用预处理语句防止SQL注入
  $stmt = $conn->prepare("SELECT * FROM notes WHERE note_id = ?");
  $stmt->bind_param("s", $_POST['id_delete']);
  $stmt->execute();
  $query_sql_deletedStatus_notes = $stmt->get_result();
  $result_query_sql_deletedStatus_notes = $query_sql_deletedStatus_notes->fetch_assoc(); 

  if ($result_query_sql_deletedStatus_notes["deleted_status"] == "y") { 
    if ($result_query_sql_deletedStatus_notes["note_type"] == "notes") { 
      $stmt = $conn->prepare("DELETE FROM notes WHERE note_id = ?");
      $stmt->bind_param("s", $_POST['id_delete']);
      $stmt->execute();
    } else { 
      $like_pattern = "image_uploads/" . $_POST['id_delete'] . "!_%";
      $stmt = $conn->prepare("DELETE FROM notes WHERE image_directory LIKE ? ESCAPE '!'");
      $stmt->bind_param("s", $like_pattern);
      $stmt->execute();
    } 
  } else { 
    // 确保$date_time_curr已定义,否则会报错
    if (!isset($date_time_curr)) {
      $date_time_curr = date("l, F j, Y. | h:i:s A");
    }
    $like_pattern = "image_uploads/" . $_POST['id_delete'] . "!_%";
    $stmt = $conn->prepare("UPDATE notes SET deleted_status='y', date_deleted = ? WHERE note_id = ? OR image_directory LIKE ? ESCAPE '!'");
    $stmt->bind_param("sss", $date_time_curr, $_POST['id_delete'], $like_pattern);
    $stmt->execute();
  } 
  $stmt->close();
} 

$conn->close(); 
// 明确告诉浏览器返回的是JSON格式
header('Content-Type: application/json');
// 输出纯净的JSON
echo json_encode($result_query_sql_deletedStatus_notes); 
?>

额外排查技巧

如果修改后还是报错,打开Chrome控制台的「Network」标签,找到对应的AJAX请求,查看「Response」内容:

  • 如果返回的内容里有PHP警告、错误信息或者多余空格,说明PHP代码有输出污染,需要修复这些警告(比如检查$date_time_curr是否定义,include的文件有没有多余空格);
  • 如果返回的是标准JSON格式,再回头检查前端逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:23:48