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

如何用AJAX解析PHP返回的JSON?解析遇未终止字符串错误

解决JSON解析报错“Unterminated string”的问题

我看你遇到的情况挺典型——在线JSON解析器能正常识别数据,但前端用JSON.parse()就报字符串未终止的错误,咱们一步步排查解决:

1. 先搞定PHP端的编码和JSON输出规范

你返回的JSON里包含葡萄牙语特殊字符(比如Além里的é),这很可能是编码不兼容导致的问题:在线解析器会自动兼容编码,但JS的JSON.parse()对编码要求极严格,必须是UTF-8无BOM格式。

给你几个PHP端的修复步骤:

  • 在PHP脚本最顶部(任何输出之前)设置响应头,明确编码:
    header('Content-Type: application/json; charset=utf-8');
    
  • 生成JSON时带上JSON_UNESCAPED_UNICODE参数,避免特殊字符转义出错:
    echo json_encode($your_data_array, JSON_UNESCAPED_UNICODE);
    
  • 检查PHP文件本身的编码:确保是UTF-8(无BOM),有些编辑器默认会加BOM,这会让JSON开头多了看不见的字符,直接搞砸解析。

2. 排查AJAX返回的冗余内容

有时候PHP脚本会偷偷输出额外内容——比如错误提示、空格、换行,甚至是之前调试用的echo/var_dump,这些都会让JSON变得不完整。

你可以先在AJAX回调里打印原始返回内容,确认是不是纯JSON:

success: function (msg) {
  console.log("原始返回内容:", msg); // 先看返回的是不是干净的JSON
  try {
    let data = JSON.parse(msg);
    alert(data.username);
  } catch (e) {
    console.error("解析错误详情:", e);
  }
}

如果发现有多余内容,去PHP脚本里检查:有没有开启错误输出?有没有多余的echo?有没有PHP闭合标签?>后面的空格?(建议PHP脚本最后不要加?>,避免意外输出)

3. 优化AJAX请求的写法

你当前的写法有点矛盾:把参数拼在URL里却用了POST方法,而且&是HTML实体,直接用在JS里会被当成字符串的一部分,导致参数传递错误,返回的JSON可能不是你预期的内容。

改成更规范的写法:

$.ajax({
  url: EndSer + "includes/getPostInfo.php",
  type: "POST",
  data: {
    username: localStorage.getItem("usernameWI"),
    password: localStorage.getItem("passwordWI"),
    postCod: postCod
  },
  dataType: "json", // 让jQuery自动解析JSON,不用手动JSON.parse()
  success: function (data) {
    alert(data.username);
  },
  error: function(xhr, status, error) {
    console.error("请求错误:", status, error);
    console.log("错误返回内容:", xhr.responseText);
  },
  cache: false
});

这里加了dataType: "json",jQuery会自动处理JSON解析和编码问题,同时把POST参数放在data对象里,避免URL拼接的编码坑。

总结

大概率是编码不兼容或者PHP输出冗余内容导致的问题,先按上面的步骤排查:先搞定PHP的编码和JSON输出规范,再确认AJAX返回的内容是否纯净,最后调整AJAX写法即可。

内容的提问来源于stack exchange,提问作者André Morais

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:02:35