2

我在 chrome 上出现“SyntaxError: Unexpected token ILLEGAL”错误。

<?
$data = "this is description
         new line";
?>

$(".gantt").gantt({
  desc: "<? echo $data; ?>"
});

错误在“这是描述”和“新行”之间。为什么我不能在那里使用输入?有没有办法避免这种情况?

4

3 回答 3

5

JavaScript 字符串中不能有(未转义的)新行。

您正在输出:

$(".gantt").gantt({
  desc: "this is description
         new line"
});

之后的新行description无效。

你需要json_encode你的价值(是的,json_encode也适用于纯字符串)。

$(".gantt").gantt({
  desc: <? echo json_encode($data); ?>
});

请注意,我删除了引号。 json_encode将为您添加报价。

于 2012-11-19T20:38:12.870 回答
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";
?>

要了解这些样式之间的区别,请查看客户端的渲染源。

于 2012-11-19T20:37:55.597 回答
0
...
desc: "<?= str_replace('\n', '\\n', $data); ?>",
...

Javascript 会在换行符上阻塞,但您可以“转义”以避免该问题。

或者,正如 Marc B 提到的,您可以使用json_encode

...
desc: <?= json_encode($data); ?>,
...

如果您发现json_encode输出为空值,那么您很可能需要utf8_encode您的内容。

于 2012-11-19T20:37:49.630 回答