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

RxJS 5.2.0 Ajax请求含&符号的JSON序列化问题求助

解决RxJS ajax.post中JSON字段包含&符号的序列化问题

首先,我注意到你的代码里有一个关键错误——请求头的字段名写错了!这正是导致&符号破坏JSON结构的核心原因。当Content-Type没有正确设置为application/json时,RxJS的ajax默认会把payload当作表单数据编码,此时&符号会被识别为参数分隔符,自然会打乱你的JSON结构。

具体解决步骤:

  1. 修正请求头:把{'Content-': 'application/json'}改成{'Content-Type': 'application/json'},这是让请求以JSON格式发送的关键。
  2. 可选优化:避免提前序列化:RxJS的ajax.post在正确设置Content-Type后,会自动将传入的payload对象序列化为JSON字符串,所以你其实不需要提前对categories和shop执行JSON.stringify,直接传递原始对象即可(如果业务逻辑必须提前转成字符串,也不影响,JSON序列化会正确处理其中的&符号)。

修正后的代码示例:

let categories = action.payload.subcategories.map(cat => cat.id)
// 无需提前stringify,让RxJS自动处理序列化逻辑
action.payload.categories = categories
action.payload.shop = action.payload.shop // 保留原始对象即可
return ajax
  .post(
    'http://192.xxx.xxxx:4000/products',
    action.payload,
    { 'Content-Type': 'application/json' } // 修正后的正确请求头
  )

为什么这样能解决问题:

当请求头设置正确的Content-Type: application/json时,RxJS会将整个payload对象序列化为标准JSON字符串,其中的&符号会被当作普通字符包含在JSON的字符串字段中,不会被解析为表单参数分隔符。你的Elixir后端只需要按照常规的JSON解析方式处理请求体即可,完全不需要额外的URL解码操作,也不会修改payload的原有结构。

哪怕你之前已经提前对categories和shop做了JSON.stringify,修正请求头后依然有效——JSON会把这些字符串字段原样包含进去,&符号不会影响整个JSON的结构完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:22:36