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

携带特殊字符的Ajax请求导致应用崩溃,疑似编码或JSON.parse问题

问题根因
  • JSON 规范要求字符串必须为 UTF-8 编码,你的数据库使用 iso-8859-1 编码,后端从数据库读取数据后直接输出 JSON 的话,特殊字符的编码不符合 JSON 要求,JSON.parse 解析非法编码的字符串时就会抛出异常导致崩溃
  • 前端请求参数编码和后端接收逻辑的编码不匹配,也可能导致查询不到数据或者返回内容乱码
修复方案

前端代码修改

  • 移除手动 encodeURIComponent 操作:jQuery 发送 application/x-www-form-urlencoded 格式请求时会自动对参数做编码,手动编码会导致参数被二次转义,后端无法正确读取参数值
  • 新增错误捕获逻辑,避免解析失败直接导致页面崩溃
    修改后代码如下:
$(document).ready(function() {
  $("#destinataire").change(function(){
    $.ajax({
      url: "testNicolas.php",
      type :'post',
      contentType : "application/x-www-form-urlencoded; charset=UTF-8",
      data :{ destinataire : $("#destinataire").val()},
      success : function(result) {
        try {
          var toStringResult = JSON.parse(result);
          $('#cp').val(toStringResult.cp);
          $('#ville').val(toStringResult.ville);
          $('#ad1').val(toStringResult.ad1);
          $('#ad2').val(toStringResult.ad2);
          $('#ATitre').val(toStringResult.aTitre);
          $('#nom').val(toStringResult.aNom);
          $('#pays').val(toStringResult.pays);
          $('#tel').val(toStringResult.tel);
          $('#mail').val(toStringResult.mail);
        } catch (e) {
          // 可根据需要添加异常处理逻辑,比如提示用户操作失败
          console.error('数据解析失败', e);
        }
      },
      error: function (xhr, status, error) {
        console.error('请求失败', error);
      }
    })
  })
})

后端(PHP侧)修改

这部分是解决问题的核心,必须调整编码转换逻辑:

  1. 接收前端传的参数时,先将UTF-8编码的参数转为iso-8859-1编码,再传入数据库查询,避免查询条件乱码
  2. 从数据库读取到数据后,将所有字段从iso-8859-1编码转为UTF-8编码,再输出JSON字符串
  3. 输出JSON前指定响应头的编码为UTF-8
    示例代码:
<?php
// 输出前指定响应编码
header('Content-Type: application/json; charset=utf-8');

// 接收参数后转编码
$destinataire = mb_convert_encoding($_POST['destinataire'], 'ISO-8859-1', 'UTF-8');

// 这里是你原有查询数据库的逻辑
// ... 数据库查询操作 ...
$row = 你的数据库查询返回结果;

// 查询到结果后转编码
foreach ($row as $key => $value) {
  $row[$key] = mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1');
}

// 输出JSON
echo json_encode($row);
?>
验证方法

修改后先测试携带特殊字符的请求,查看后端返回的响应内容是否为正常可识别的特殊字符,没有乱码的话JSON.parse就可以正常解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:21:01