2012-08-02 122 views
0

我试图通过rails应用程序在数据库中存储数字签名。JSON字符串未在Javascript中解析

我正在使用JavaScript插件,将签名转换为JSON字符串。接下来,我从params中抽取JSON字符串并存储在一个变量中。现在我想通过将弹出的JSON字符串赋给反向JavaScript函数来重新生成签名。

如果我将JavaScript中的变量直接设置为JSON字符串并将其传递给函数,则反转函数可以正常工作。然而,当我将变量赋给存储JSON字符串的我的Rails变量时,它不起作用。 JSON字符串的值在两种情况下都完全相同。

在第一种情况下,typeof var正确显示obj.obj类型,但在第二种情况下显示为字符串。我厌倦了使用JSON和Jquery进行解析的每一个技巧,但它不起作用。

我的轨控制器:

@recipient_signature = params[:recipient_signature] 

我的看法,我想用JSON字符串,看看生成的签名。

var sig = "<%[email protected]_signature%>"; 
    $(document).ready(function() { 
     $('.sigPad').signaturePad({displayOnly:true}).regenerate(sig); 
    }); 

即使@recipient_signature中的值正确形成了JSON字符串,上述情况也不起作用。

但是当我分配相同的JSON字符串SIG的像下面它的工作原理...

var sig = [{"lx":55,"ly":25,"mx":55,"my":24},{"lx":55,"ly":25,"mx":55,"my":25}....']; 

这JSON字符串是相同@recipient_signature和<%[email protected]_signature%> correctly.

的Javascript显示在某种程度上不在第一种情况下将其识别为一个数组,并在第二种情况下执行......如何解决它?

+0

“它工作正常,如果我”是什么?你的JSON看起来不错,你可以安装萤火虫,并在控制台日志这里>复制错误? – 2012-08-02 02:30:34

+0

*“但是,当我将下面的sig分配给相同的JSON字符串时...“*这不是一个JSON字符串,这是数组和对象的字面语法 – 2012-08-02 02:31:37

+0

你只需要写 var sig ='<%= j @recipient_signature%>'; – 2012-08-03 07:52:41

回答

0

你包裹在引号的JSON和HTML编码形式使用变量:

var sig = "<%[email protected]_signature%>"; 

应该

var sig = <%=raw @recipient_signature%>; 

还是应该解析JSON:

var sig = JSON.parse('<%=raw @recipient_signature%>'); 
+0

这两个都不行! – user1570144 2012-08-02 02:36:06

+0

需要在' JSON.parse('<%...',因为该变量的输出包含双引号。我不确定最后一个例子是否有助于注入攻击,因为服务器端变量的值已被直接注入进入页面(与通过Ajax检索相比),所以服务器端变量可能类似于:'abc“); alert(“注入代码”,浏览器会看到'var sig = JSON.parse(“abc”); alert(“Injected code”);' – nnnnnn 2012-08-02 02:37:22

+0

@ user1570144你需要禁用html转义变量。 – 2012-08-02 02:47:50

0

删除引号。也就是说,更改:

var sig = "<%[email protected]_signature%>"; 

var sig = <%[email protected]_signature%>; 

这样,当浏览器接收到它,它看起来就像是你的工作第二个例子。

请注意,这并不是真正使用JSON,它只是简单地使用您的服务器端代码将JS数组直接输出到JS代码中。

+0

这不起作用sig以这种方式清空 – user1570144 2012-08-02 02:38:34

+0

如果您使用浏览器“查看页面源代码”选项代码是什么样子的? – nnnnnn 2012-08-02 02:39:50

+0

我有萤火虫,我如何看到Javascipt错误? – user1570144 2012-08-02 02:41:56

0

我的猜测是你的工作分配到双引号引起一个问题 - 尝试单引号。