RxJS 5.2.0 Ajax请求含&符号的JSON序列化问题求助
解决RxJS ajax.post中JSON字段包含&符号的序列化问题
首先,我注意到你的代码里有一个关键错误——请求头的字段名写错了!这正是导致&符号破坏JSON结构的核心原因。当Content-Type没有正确设置为application/json时,RxJS的ajax默认会把payload当作表单数据编码,此时&符号会被识别为参数分隔符,自然会打乱你的JSON结构。
具体解决步骤:
- 修正请求头:把
{'Content-': 'application/json'}改成{'Content-Type': 'application/json'},这是让请求以JSON格式发送的关键。 - 可选优化:避免提前序列化: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
相关产品推荐
相关产品推荐

