未结束的字符串字面量

3
我有一个PHP脚本,可以将MP3文件上传到我的服务器上。我使用“uploadify”实现这个功能。当文件上传完成后,会触发“onSelect”事件(文档)。我想在每次上传完文件后动态刷新播放列表。但是,在“onselect”字段中,我的函数抛出了“未终止的字符串文字”的错误。经过长时间的搜索,我将我的单行函数改为多行函数(这里添加了换行符以方便阅读)并在双引号前添加反斜杠。请注意保留HTML标记。
function() {$('#response').append("
<script type=\"text/javascript\">
    var flashvars = {url:'./media/audio/users/126/md6xs4cv8ks0.mp3',artist:'Undef', track:'Undef', duration:''};
    var Params = {};
    var attributes = {};
    swfobject.embedSWF(\"min.swf\", \"myAlternativeContent1\", \"320\", \"40\", \"9.0.0\", false, flashvars, params, attributes);
</script>
<div id="myAlternativeContent1">
    <a href="http://www.adobe.com/go/getflashplayer">
    <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
    </a>
</div>
3个回答

8

与其他答案不同,字符串字面量可以包含换行符,只需要使用反斜杠进行转义,如下所示:

var string = "hello\
world!";

然而,这并不会在字符串中创建换行符,因为它必须是显式的 \n 转义序列。这实际上将变成 helloworld。完成。
var string = "hello"
+ "world"

如果更加干净利落的话


字符串字面量可以包含换行符。这不会在字符串中创建换行符。你对\\是正确的,但如果你用一种试图贬低其他答案的方式来表达你的答案,你应该确信你的答案是最高水平的。 - Lightness Races in Orbit
我不明白我的帖子有什么问题。字符串字面值包含换行符。由此产生的字符串对象却没有。 - Richard Hoffman

3

你发布的帖子中的语法高亮已经表明:你的<div>块中存在未转义的引号(同时你也忘了结束脚本)。

无论如何,在JavaScript中,字符串文字不能跨越多行。

可以尝试使用以下方式代替:

alert("lol
       wtf");

write:

alert("lol" +
      "wtf");

您可能还考虑将 </script> 子字符串分开,这已知会引起解析问题

"</scr" + "ipt>"

(严格来说,为了等价,上面的第二个例子会在 lol 后面添加 \n 和一些空格,但对于编写 HTML 标记来说,这不应该有影响。)


感谢您对引号的评论。 关于多行:它们被添加在这里是为了方便。源代码是单行的。 - dark
@dark:当它完全破坏了问题时,这几乎不是方便。第一段仍然存在(查看您的“div”)。 - Lightness Races in Orbit

0

可能是因为存在 </script>。尝试转义一个或多个字符(例如使用 <\/script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接