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

AJAX POST传含逗号字符串触发JSON::ParserError问题求助

解析Rails JSON::ParserError及AJAX数据传递注意事项

咱们先拆解你遇到的两个错误原因:

第一个错误(带外层单引号的情况)

你发送的数据是{obj: { obj1: '"Word1", "Word2", "Word3"'}},但Rails收到的内容里出现了单引号——看报错信息里的''"Word1","Word2","Word3"',开头和结尾的单引号是JSON语法完全不允许的。JSON规范里字符串必须用双引号包裹,单引号属于非法字符,所以解析器直接报错了。

第二个错误(去掉外层单引号的情况)

当你去掉外层单引号后,数据变成了{obj: { obj1: "Word1", "Word2", "Word3"}},这时候JSON结构直接乱了:obj是一个对象,每个键值对必须是「键: 值」的格式。这里obj1的值到"Word1"就结束了,后面的, "Word2", "Word3"没有对应的键,属于无效的JSON结构,解析器自然会在逗号位置报错。

正确的处理方式

首先得明确你要传递的是什么:

  • 如果是单个包含逗号的字符串(比如内容就是Word1, Word2, Word3),直接把它作为普通字符串赋值给obj1就行,不需要额外加引号:
    const data = {
      obj: {
        obj1: "Word1, Word2, Word3"
      }
    };
    
  • 如果是多个单词的数组(比如要传递三个独立的单词),直接用数组格式更合适,后端还能直接按数组处理:
    const data = {
      obj: {
        obj1: ["Word1", "Word2", "Word3"]
      }
    };
    

AJAX传递时需要编码吗?

不需要手动编码,只要保证AJAX发送的是标准的JSON格式就行。比如用jQuery的话,一定要做这两步:

  1. 设置contentType: "application/json",告诉后端你发的是JSON数据;
  2. 用JSON.stringify()把数据对象转成JSON字符串再发送,避免框架默认用form-urlencoded编码导致的序列化错误。

举个完整的jQuery例子:

const data = {
  obj: {
    obj1: "Word1, Word2, Word3" // 换成数组也可以
  }
};

$.ajax({
  url: '/your-rails-endpoint',
  method: 'POST',
  contentType: 'application/json',
  data: JSON.stringify(data),
  success: function(res) {
    // 处理返回结果
  }
});

这样发送的就是完全符合规范的JSON,Rails的解析器就能正常处理了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:05:47