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

时间:2014-03-13 23:56:09

标签: javascript html scriplets

我在我的一个网页的body元素的onLoad中调用了一个javascript函数。看起来像这样:

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

getStringWithBrackets()是一个java函数,将返回如下字符串:“['Name']”

发生这种情况时会发生语法错误:SyntaxError: syntax error initPage([

并且有一个小箭头指向括号后面。

如果我用单引号包围scriplet,小箭头指向单引号和括号:initPage('[。

我们是否不允许使用括号作为参数传递字符串?

修改 感谢你目前的帮助。这是失败的html行(我在运行到错误后从源代码复制。我刚刚更改了其他函数的名称,其他所有内容都未触及),我已将单引号放回到scriplet周围以显示失败:

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

还想提一下,java方法getStringWithBrackets()正在使用Gson返回java List()的json字符串版本。这就是我得到[“打印”]的方式。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

onload变为&#34; initPage([&#34;(从您的错误中我看到onLoad设置在[之后终止,因此它必须与onLoad字符串具有相同的引用本身 当然是无效的javascript。

当然可以将带参数的字符串作为javascript传递。您还可以将数组作为参数传递。但你不能同时将'"写入一个javascript表达式中,除非你将其中的任何一个加入,否则它本身就会被引用。

希望它有所帮助!