当参数包含括号时,为什么javascript会因为语法错误而失败

Why does javascript fail with syntax error when parameter contains bracket?

本文关键字:因为 语法 错误 失败 javascript 为什么 包含括 参数      更新时间:2023-09-26

我在我的一个网页的body元素的onLoad中调用javascript函数。如下所示:

 <body onLoad="initPage(<%=object.getStringWithBrackets()%>); otherfunction();">

getStringWithBrackets()是一个java函数,它将返回一个像这样的字符串:"['Name']"

出现语法错误:SyntaxError: syntax error initPage([

括号后面有一个小箭头。

如果我用单引号括住脚本,小箭头就会指向单引号和括号之间:

不允许传递带括号的字符串作为参数吗?

编辑:

谢谢你的帮助。这是失败的html行(我在遇到错误后从源代码复制的)。我只是更改了另一个函数的名称,其他所有内容都未更改),我在脚本周围放回单引号以显示失败:

<body onLoad="initPage('["Print"]'); otherfunction('param1', 'param2', 'param3', 'param4', 'param5');">

还想提到的是,java方法getStringWithBrackets()使用Gson返回java List()的json字符串版本。我就是这样得到["Print"]的

在我看来,你的问题是你正在返回字面上的"['Name']",你插入到一个onLoad值,它本身是包装在单引号。我不能确切地追踪为什么你会结束你所说的你得到的东西,但我猜你没有向我们提供你的确切的 javascript代码,并且onLoad被包装在与Name相同的引号中(在这里你显示单引号,字符串被终止)。所以你最终会写出像这样的html:

onload变成"initPage(["(从你的错误中我看到onload设置在[之后终止,所以它必须具有与onload字符串本身相同的引号)和当然,是无效的javascript。

当然可以传递带有参数的字符串作为javascript。还可以将数组作为参数传递。但是你不能把'"都写进一个javascript表达式中,除非你转义它。

希望有帮助!

看起来您需要在字符串值周围添加引号。你的asp.net代码将返回一个字符串,但你需要在它周围加上引号,以便在javascript中被视为字符串:

<body onLoad="initPage('<%=object.getStringWithBrackets()%>'); otherfunction();">