如何在JavaScript内联属性代码中引用/写入JSP变量?
我需要在运行时将变量发送到ajax的js方法。我正在尝试使用此onclick函数,但单击时会出现语法错误:如何在JavaScript内联属性代码中引用/写入JSP变量?,javascript,jsp,attributes,Javascript,Jsp,Attributes,我需要在运行时将变量发送到ajax的js方法。我正在尝试使用此onclick函数,但单击时会出现语法错误: <c:set var="abc" value="${myTaglib:getAbc()}" /> <a href="#" onclick="sendAjax(${abc.firstVal}, ${abc.secVal}, ${abc.thirdVal}, ${abc.fourthVal}, ${abc.fifthVal})"> Click Here !!!</
<c:set var="abc" value="${myTaglib:getAbc()}" />
<a href="#" onclick="sendAjax(${abc.firstVal}, ${abc.secVal}, ${abc.thirdVal}, ${abc.fourthVal}, ${abc.fifthVal})"> Click Here !!!</a>
实际的HTML如下所示:
<a onclick="sendAjax(240265, Workplace Ethics Exam, Company Security Policy, Friends Life, ABF/45RFG, 41444.1830)" href="#">Click Here !</a>
这个JS调用有什么问题?您是否尝试在最后一个大括号后留下空格?JavaScript代码中的空格很可能是语法错误。如果您的值有空格,最好将其视为字符串
onclick="sendAjax('${abc.firstVal}', '${abc.secVal}', ... '${abc.fifthVal}')">
如果以后要将它们用作数字,可以使用JavaScript函数
parseInt
和parseFloat
将字符串转换为数字。实际返回的HTML是什么?这将准确地指示错误的位置——在本例中,错误试图写入无效的JS文本;可能是未正确写入字符串文字的文本值。${..}
插值本身不理解“JavaScript代码”上下文或如何正确编码值。现在,假设值从不包含引号(单引号或双引号),那么sendAjax(“${abc.firstVal},”${abc.secVal},…)
将“修复”该结果。这仍然是一个可怕的黑客(因为它是手动的,如果有引号和其他一些边缘情况,它将“随机中断”);应该有一个合适的编码函数——我在C#中创建了这样的函数,我确信Java/JSP也有类似的函数。一个相关的/重复的问题(由于不同的上下文,它并不精确!)——有一个勉强可以通过的/适应性强的解决方案。理想情况下,会有一种“稍微优雅”的方法来做到这一点。请注意:有人可以发布一个可靠的解决方案,考虑到上述因素,这将保证任何变量值的JavaScript都是有效的吗?在几份(接近)副本中,所有都是“手动引用”的黑客。好吧,我找不到太多关于这个主题的东西——谷歌和所有的。考虑到我有限的“已知解决方案”和我对黑客的厌恶,我会编写一个自定义函数(),然后将其用作适当的包装器。它看起来像:sendAjax(${js:lit(abc.firstVal)},${js:lit(abc.secVal)},…
。然后只需编写“lit”或(为了“生成一个安全的文本”)函数来返回一个正确的值,这应该是相对容易的。按照文本将对字符串使用单引号和转义双引号的约定(用于属性引号)。是的。没有效果。我不确定是否需要使用引号并转义它们…但是这些变量中的任何一个都可以是字符串或带小数的双精度整数。
onclick="sendAjax('${abc.firstVal}', '${abc.secVal}', ... '${abc.fifthVal}')">