我正在尝试解析存储在我的Rails代码正在调用的cookie值中的JSON字符串。
Rails能够读取字符串,直到逗号(',')分隔字符串中的两个不同的键:值对。
JavaScript的:
var value1 = "v1";
var value2 = "v2";
var obj = { key1: value1, key2: value2 };
document.cookie = "cookiename="+JSON.stringify(obj);
的Cookie:
Name: cookiename
Content: {"key1":v1,"key2":v2}
滑轨:
@cookievalue = cookies[:cookiename]
在erb<%= @cookievalue%>中调用@cookievalue时的Rails将其评估为:
{"key1":v1
除了逗号(',')之外的任何分隔key1:v1,key2:v2的内容都将丢失。
有什么想法吗?
我尝试将其作为直接文本,它与遇到的第一个逗号做同样的事情。
已更新 回答了我自己的问题 - 需要使用JS中的encode()来逃避用逗号分隔值的逗号。
答案 0 :(得分:7)
逗号不是一个有效的字符(显然我看过这个),因此它删掉了所有内容。
UPDATED FIX :
将一个encodeURIComponent()添加到JavaScript:
document.cookie = "cookiename="+encodeURIComponent(JSON.stringify(obj));
这会正确转义字符并将JSON格式的字符串正确传递给我的服务器。还使用encodeURIComponent()而不是encode(),因为亚洲或亚洲字符不能用encode()正确编码。
服务器端更改(可选):
@cookievalue = JSON.parse(cookies[:cookiename])
这允许我从cookie [:cookiename]
中检索后更轻松地解析JSON字符串上一个修正:
在JavaScript中添加了一个encode():
document.cookie = "cookiename="+encode(JSON.stringify(obj));