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

如何向XMLHttpRequest的GET请求中添加JSON数据?

问题原因分析
  • HTTP标准中GET请求的语义为获取资源,没有对请求体的语义做定义,绝大多数后端框架默认不会解析GET请求的请求体,因此你第一种直接在GET请求中send JSON的写法,后端自然无法通过req.json拿到数据。
  • 你第二种把JSON序列化后拼到查询字符串的写法,数据是存放在URL的查询参数里的,req.json只会解析请求体中的JSON内容,自然返回null,你只能通过查询参数相关的API拿到数据。
  • Postman可以正常拿到是因为Postman工具本身不限制GET请求携带请求体,且你的后端应该做了GET请求体解析的特殊配置,但这种方式兼容性极差,绝大多数浏览器、代理服务器、CDN都会直接丢弃GET请求的请求体,不建议生产环境使用。
  • 之前jQuery的ajax方法可以正常使用,大概率是你之前的jQuery代码在GET请求下传参时,jQuery自动将参数序列化为查询字符串拼接到了URL上,后端当时是从查询参数中获取数据,并非是从请求体的JSON中解析,和你现在的第二种写法本质一致。
解决方案

方案1:继续使用GET请求

保留第二种拼接查询字符串的写法,后端调整获取逻辑,从查询参数中取出对应字段后自行反序列化JSON即可,以Node.js Express框架为例:

const jsonData = JSON.parse(req.query.data)

方案2(更推荐):改为POST请求

遵循HTTP语义,将请求方法改为POST,补充JSON类型的请求头,后端req.json即可正常解析到请求体中的JSON数据:

xhr.open("POST", "http://localhost/test", true);
xhr.setRequestHeader('Content-Type', 'application/json');
body = JSON.stringify({"email": "hey@mail.com", "password": "101010"});
xhr.send(body);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:04