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

我的Ajax返回结果出现奇怪字符,开头138d结尾0该如何禁用?

解决Ajax返回结果首尾出现额外字符的问题

问题原因

你观察到的138d开头、0结尾的额外字符,是**HTTP分块传输编码(Chunked Transfer Encoding)**的内置协议标记:当服务端响应头携带Transfer-Encoding: chunked时,响应体会被拆分为多个数据块分批传输,每个块开头的十六进制字符代表当前块的字节长度,全部块传输完成后会用单独一行的0标识传输结束,你的返回示例符合该特征:

138d


{"feeds":[{"pubdate":"Sun, 28 Nov 2021 23:00:00 EST"}]}
0

禁用方法(从根源消除额外字符)

你可以通过服务端配置关闭分块传输编码,不同服务端环境的配置方式如下:

  • Nginx:在对应站点的server配置块中添加chunked_transfer_encoding off;,保存后重启Nginx生效,该配置仅对HTTP/1.1协议生效。
  • Node.js(Express/Koa):返回响应时提前计算响应体的总长度,手动设置Content-Length响应头,服务端会自动关闭分块传输,Express示例代码:
const responseData = JSON.stringify({ feeds: [/* 业务数据 */] });
// 计算响应体字节长度
res.set('Content-Length', Buffer.byteLength(responseData));
res.send(responseData);
  • Java(SpringBoot):可在配置文件中添加spring.servlet.encoding.chunked=false关闭分块传输,也可手动设置响应的Content-Length头实现相同效果。
  • PHP:输出响应前关闭输出缓冲并指定Content-Length头,示例代码:
<?php
$responseData = json_encode(['feeds' => [/* 业务数据 */]]);
header('Content-Length: ' . strlen($responseData));
echo $responseData;
?>

前端兼容方案(无需修改服务端)

如果不便调整服务端配置,也可以在前端对原始响应做内容提取,过滤掉分块传输的标记字符后再解析:

// rawResponse 为Ajax请求拿到的原始响应字符串
const validContent = rawResponse
  // 移除开头的十六进制长度行和多余空白
  .replace(/^[0-9a-fA-F]+\s+/, '')
  // 移除末尾的结束标记0和多余空白
  .replace(/\s+0$/, '')
  .trim();
// 解析有效JSON数据
const data = JSON.parse(validContent);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:05