Layui上传组件如何解决上传接口返回乱码导致解析失败

幻夢星雲

幻夢星雲

2026-07-21

283人浏览

原创

上传成功却报“数据格式错误”是因为Layui在JSON.parse前未清洗响应体中的BOM(\uFEFF)、控制符或多余空白,导致解析失败;需后端主动清除或前端容错解析。

为什么上传成功却报“数据格式错误”

根本不是编码问题,而是 layuijson.parse() 前没做字符清洗——只要响应体开头带 bom(\ufeff)、中间有不可见控制符、或末尾多空格,就会解析失败,触发 data-format-error。浏览器 network 面板看到的“正常 json”,可能实际是 {"code":0,"msg":"ok"} 这种肉眼难辨的乱码。

检查响应体是否含 BOM 或非法字符

打开浏览器 Network → 找到上传请求 → 点 Response 标签页 → 右键“Save response as…”保存为 .txt → 用 VS Code 或 Notepad++ 以 UTF-8 with BOM / ANSI 模式反复切换查看。常见现象:

  • 文件开头出现 (BOM 的 ASCII 表示)
  • 响应末尾多出换行、\r\n 或零宽空格 \u200B
  • PHP 中 echo 前有空白、或开启了 output_buffering
  • Java 中 @ResponseBody 方法被 Filter 或 Interceptor 注入了 HTML 注释

后端强制清除 BOM 和空白的实操方式

不依赖框架自动处理,直接在返回前做净化:

  • PHP:用 trim(mb_convert_encoding($json, 'UTF-8', 'UTF-8')) + str_replace("\xEF\xBB\xBF", '', $json)
  • Node.js(Express):res.json() 替换为 res.set('Content-Type', 'application/json; charset=utf-8').send(JSON.stringify(obj).replace(/^\uFEFF/, '').trim())
  • Java(Spring Boot):在 Controller 返回前加 new String(json.getBytes(StandardCharsets.UTF_8)).trim(),或用 @ControllerAdvice 统一过滤响应体

关键点:res.json() 在 Express 中默认不 trim;@ResponseBody 在 Spring 中不自动 strip BOM —— 必须手动干预。

layui手机车牌号码键盘代码
layui手机车牌号码键盘代码

layui手机车牌号码键盘代码是一款基于jQuery跟layui制作的手机端车牌号码输入弹出键盘选择,支持新能源汽车车牌输入格式代码。

下载

前端加一层容错解析(临时兜底)

如果后端短期无法改,可在 done 回调前拦截原始响应:

layui.upload.render({
  elem: '#test',
  url: '/upload',
  done: function(res, index, upload) {
    // 不要直接用 res,先尝试清洗
    let raw = upload.config.xhr.responseText;
    try {
      // 移除 BOM、空白、控制字符
      raw = raw.replace(/^\uFEFF/, '').trim().replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '');
      res = JSON.parse(raw);
    } catch(e) {
      console.error('清洗后仍解析失败:', raw);
      return;
    }
    // 后续逻辑...
  }
});

注意:upload.config.xhr 是原生 XHR 对象,responseText 是未解析的原始字符串 —— 这是唯一能拿到“乱码源”的地方。别试图在 beforeerror 里修,时机已过。

真正麻烦的不是 BOM,而是某些老系统模板引擎(如 FreeMarker)静默注入的不可见字符,它们不会出现在开发者工具的 Response 预览区,只在“Raw”或保存文件后暴露。每次改完后端,务必用 curl -s http://your-api/upload | hexdump -C 看开头字节。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

1123

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

318

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

1017

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

915

6

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.09

1625

4

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

2023.11.14

629

3

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2024.03.12

5112

8

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

4620

6

Go 语言 HTTP 编程与中间件开发教程合集
Go 语言 HTTP 编程与中间件开发教程合集

全面讲解 Go 语言 HTTP 编程的核心知识,涵盖 net/http 标准库的 Server/Handler/HandlerFunc 体系、DefaultServeMux 路由注册与自定义路由器、Request / ResponseWriter 请求响应处理、中间件(Middleware)链式设计模式与常见中间件(日志/CORS/认证/限流)开发、http.Client 的超时配置与连接池管理、Cookie / Session 处理、

2026.05.08

174

31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 11.4万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 9.7万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.5万人学习