通过模板工具箱从多行字符串中获得的意外令牌是非法的
Unexpected token ILLEGAL from multi line string via template toolkit
我在html页面中有一个js脚本,通过template::toolkit进行预处理。
脚本如下;
<script>
$(function(){
var floot = {
id : [% floot.id %],
image : '[% floot.image %]',
title : "[% floot.title %]",
desc : "[% floot.desc %]",
history : []
};
/* unrelated stuff */
/* set click event to display the floot details in an overlay */
$('#' + floot.id).children('.openDetails').click(function() {
bubbleDetails(floot, user);
});
</script>
问题是floor .desc可以包含换行符-它是一个描述,我想保留它们,但是js在换行符上阻塞芯片,导致Unexpected令牌错误。
我已经尝试了许多TT过滤器,例如
[% floot.desc | html_line_break | replace(''n', ' ') %]
这成功地删除了换行符,并将它们替换为<'br>(请原谅反斜杠,编辑器正在解释其他的br),但是它不起作用,然后页面中呈现了<'br>而不是换行符。
在这个阶段,我认为这样做的唯一方法是从bubbleDetails中搜索<'br>在floor .desc中,并用换行符替换它的任何出现,但是我想检查是否有人知道更好,更不笨拙的方法来做到这一点?
我以前从未使用过这个包,但是看看文档,这个看起来可能是你需要的:
http://template-toolkit.org/docs/manual/VMethods.html向下滚动到dquote部分
也可以转义双引号,这可能很好
有处理JSON转换的TT插件,这是你有效的,如果没有显式地做。如果可能的话,应该尽量避免代码生成——让插件去操心这些晦涩难懂的问题。
我喜欢JSON::Escape,你可以这样执行:
[% USE JSON::Escape; %]
<script>
$(function(){
var floot = [% floot.json %];
floot.history = []; // might not even be necessary?
};
/* unrelated stuff */
/* set click event to display the floot details in an overlay */
$('#' + floot.id).children('.openDetails').click(function() {
bubbleDetails(floot, user);
});
</script>
这个相关的问题和答案也可能有用。
如果您这样做,错误仍然发生,那么正如@agreco所说,它一定是bubbleDetails()
函数中的问题。
相关文章:
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- jQuery$.getJSON抛出意外令牌
- 为什么我在下面的..of循环中得到意外令牌
- 组件中的ReactJS意外令牌
- AngularJS $http GET 请求到本地 JSON 文件返回语法错误:意外令牌]
- 巴别塔,意外令牌 (15:33) ::.
- Sencha 2.0 和 Codeigniter RESTful API 生成未捕获的语法错误:意外令牌:
- 在事件上使用 jquery 时出现意外令牌
- JSON 中位置 4 处的意外令牌<
- 意外令牌 ) 在我的代码中
- Electron 和 Babel 6 异步/等待抛出意外令牌
- “JSON.parse(str)”返回“意外令牌c”,但str是一个字符串
- jQuery after() uncatch SyntaxError: 意外令牌 ILLEGAL
- 使用节点javascript的意外令牌ILLEGAL
- Javascript/JQuery-Chrome意外令牌
- Ajax 帖子未捕获语法错误:意外令牌非法
- angularjs-SyntaxError:请求从服务器返回时出现意外令牌
- jquery:使用ember的意外令牌C
- React本机项目中的意外令牌
- 解析有效的 JSON 得到“语法错误:意外令牌非法”