我在使用ajax调用我的一个控制器操作时遇到问题。 在响应部分,我正在构建一个"html 对象",其中包含指向所需操作的链接,然后使用 .html( html_object( 将其放入 dom 中。
const uid = item.uid; //simple int value
html_object= '' +
... +
'<f:link.action controller="FrontendVideo" action="show" arguments="{videoUid :'+uid.toString()+'}">'
+ ...
现在我正在尝试将 uid 传递给这个字符串,但 Typo3 将 +uid.toString 解释为字符串(稍后在 dom 中我看到值是 uid.toString(((,因此我得到一个验证错误。这种行为非常奇怪和出乎意料。我尝试了各种方法(也没有toString((,因为它不是必需的(,但Typo3确实将传递的变量简单地解释为字符串。
如果我对里面的值进行硬编码,当然一切正常。
html_object= '' +
... +
'<f:link.action controller="FrontendVideo" action="show" arguments="{videoUid :123}">'
+ ...
有什么解决办法吗? 提前谢谢你。
这行不通。
您将服务器的计算与来自客户端的计算混合在一起。
流体在服务器上呈现,而javascript在客户端中执行。
它是在不同的时间完成的。
javascript 的 Fluid 不会在 Ajax 调用完成时呈现,而是在呈现初始页面时呈现。 然后就不可能插入一个(JavaScript(变量,该变量稍后在客户端上获取其值。因此,服务器只能将"变量"作为字符串插入,因为它还没有变量。
另一种方法是,如果您设法准备 Ajax 调用,以便为服务器提供一些在 Ajax 响应中呈现的流体。但是您不希望您的网站中使用这种机制。这就像SQL注入,因为每个人都可以在您的服务器中插入任何类型的Fluid语句。