从JavaScript生成的Cookie中解析Rails中的JSON字符串

时间:2011-11-21 19:32:55

标签: javascript ruby-on-rails string json cookies

我正在尝试解析存储在我的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()来逃避用逗号分隔值的逗号。

1 个答案:

答案 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));