doT模板传递多个参数报错,传递过去的json字符串解析报错

lintanfu 2018-05-22 09:26:24
今天遇到了可以说是搞前端几个月以来最奇怪诡异的问题。
1.本来好好的,突然就报错。
2.两个页面,写法一致,一个页面正常运行,另一个页面不能正常运行。

疑问1.:
两个页面:
正常页:


异常页:


写法一致,一个点击事件报错,一个正常运行。

还有,更加,最最奇怪的还是,see( {{!JSON.stringify(value)}} )
这个see()的参数value是个json对象,然后stringify()转成字符串传递了。
结果是在方法里JSON.parse(value)时报错!!!
很郁闷,查了一天没搞懂。而另一个正常页面是正常解析的

接着,更怪异的,我创建了一个 str :var str = ' {"key":"value"} ',里面的{“key”:"value"}就是value参数的值,只不过用单引号引起来。
然后我JSON.parse(str)竟然成功解析~~~
而控制台log出的str和value是一模一样,外层都没有单引号

啊,怀疑人生啊。

有没有大神,告诉我这个究竟是出来什么问题?我已经开始大胆怀疑doT有问题,下一步我准备怀疑javascript有重大bug了。


...全文
1041 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lintanfu 2018-05-23
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:

可能是引号问题。
你标签中onclick=之后双引号和单引号都用了,那么在{{= }}替换的字符串中再有单、双引号。与之拼接后就会有问题。
如 <a onclick="fun('{{=value}}')"> 当value的值是 ["a","b"] 
替换之后就是 <a onclick="fun('["a","b"]')">
onclick=之后的双引号只会和它后面最近的双引号配对,等于是onclick="fun('[" 。后面的不算事件代码。

JSON.stringify() 也会产生引号,也是同样的道理


解决方法是在{{}}内把"和'替换成"和'
<a onclick="fun('{{=value.replace(/\"/g,""").replace(/\'/g,"'")}}')">

感谢老哥。不过这里的倒不是这个问题,我觉的这个单双引号匹配doT模板应该是内部处理了。 我排查了一整天,直到刚刚,才找出原因:传递的json字符串value中,含有换行符,而我没有处理它,导致json.parse()时出错。 不管怎样,谢谢你了。
天际的海浪 2018-05-23
  • 打赏
  • 举报
回复

可能是引号问题。
你标签中onclick=之后双引号和单引号都用了,那么在{{= }}替换的字符串中再有单、双引号。与之拼接后就会有问题。
如 <a onclick="fun('{{=value}}')"> 当value的值是 ["a","b"] 
替换之后就是 <a onclick="fun('["a","b"]')">
onclick=之后的双引号只会和它后面最近的双引号配对,等于是onclick="fun('[" 。后面的不算事件代码。

JSON.stringify() 也会产生引号,也是同样的道理


解决方法是在{{}}内把"和'替换成"和'
<a onclick="fun('{{=value.replace(/\"/g,""").replace(/\'/g,"'")}}')">

天际的海浪 2018-05-22
  • 打赏
  • 举报
回复

可能是引号问题。
你标签中onclick=之后双引号和单引号都用了,那么在{{= }}替换的字符串中再有单、双引号。与之拼接后就会有问题。
如 <a onclick="fun('{{=value}}')"> 当value的值是 ["a","b"] 
替换之后就是 <a onclick="fun('["a","b"]')">
onclick=之后的双引号只会和它后面最近的双引号配对,等于是onclick="fun('[" 。后面的不算事件代码。

JSON.parse()也会产生引号,也是同样的道理

87,842

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧