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的话,一定要做这两步:
- 设置
contentType: "application/json",告诉后端你发的是JSON数据; - 用
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
相关产品推荐
相关产品推荐

