Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript内联属性代码中引用/写入JSP变量?_Javascript_Jsp_Attributes - Fatal编程技术网

如何在JavaScript内联属性代码中引用/写入JSP变量?

如何在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 !!!</

我需要在运行时将变量发送到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 !!!</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}')">