我在chrome上遇到“SyntaxError:Unexpected token ILLEGAL”错误。
<?
$data = "this is description
new line";
?>
$(".gantt").gantt({
desc: "<? echo $data; ?>"
});
错误在“this is description”和“new line”之间。为什么我不能进入那里?有没有办法解决这个问题?
答案 0 :(得分:5)
您不能在JavaScript字符串中使用(未转义)新行。
您正在输出:
$(".gantt").gantt({
desc: "this is description
new line"
});
description
之后的新行无效。
你需要json_encode
你的价值(是的,json_encode
也适用于普通字符串。)
$(".gantt").gantt({
desc: <? echo json_encode($data); ?>
});
请注意,我删除了引号。 json_encode
会为您添加引号。
答案 1 :(得分:1)
您的代码将在客户端呈现为:
$(".gantt").gantt({
desc: "this is description
new line"
});
这是不允许的,因为JavaScript不支持多行字符串(不管怎么说都不支持)。我不确定你要做什么,但如果你只想在你的JavaScript中使用多行代码,你可以这样做:
<?
$data = "this is description\
new line";
?>
或者这个:
<?
$data = "this is description\" +
\"new line";
?>
甚至这个:
<?
$data = "this is description\\
new line";
?>
要了解这些样式之间的区别,请查看客户端上呈现的源代码。
答案 2 :(得分:0)
...
desc: "<?= str_replace('\n', '\\n', $data); ?>",
...
Javascript会在新线上窒息,但你可以“逃避它”以避免这个问题。
或者,如Marc B所述,您可以使用json_encode
:
...
desc: <?= json_encode($data); ?>,
...
如果您发现json_encode
输出空值,则可能需要utf8_encode
您的内容。