【问题标题】:Typo3: Javascript problem. Fluid interprets arguments variable as stringTypo3:Javascript 问题。 Fluid 将参数变量解释为字符串
【发布时间】:2020-05-11 11:08:54
【问题描述】:

我在使用 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}">'

+ ...

有什么解决办法吗? 提前谢谢你。

【问题讨论】:

  • uid 定义在哪里?你能显示更多代码吗?
  • @tire0011:uid 只是一个 int 值。我将它添加到代码 sn-p 中。
  • 当你尝试什么时.. const viedeoUid = uid.toString();并在字符串参数="{videoUid :'+viedeoUid +'}"
  • 不幸的是不起作用..问题与流体代码的解释方式有关。
  • 当你只设置 html_object= '' ;没有其他部分,结果一样吗?

标签: javascript typo3 fluid


【解决方案1】:

这是行不通的。
您将服务器的计算与客户端的计算混合在一起。

在客户端执行 javascript 时,Fluid 在服务器上呈现。
而且是在不同的时间完成的。

当 Ajax 调用完成时,您的 javascript 的 Fluid 不会呈现,而是在呈现初始页面时呈现。那么就不可能插入一个(javascript)变量,稍后在客户端获取它的值。所以服务器只能将“变量”作为字符串插入,因为它还没有变量。


另一种方法是,如果您设法准备好 Ajax 调用以向服务器提供一些流体,这些流体会在 Ajax 响应中呈现。 但您不希望在您的网站中使用这种机制。这就像 SQL 注入,因为每个人都可以在您的服务器中插入任何类型的 Fluid 语句。

【讨论】:

  • 这就是我所害怕的:/ 那么在这种情况下,我必须更有创意并找到另一个解决方案。谢谢!
  • 在选择模板类型和 id 的地方进行 ajax 调用怎么样?喜欢{type:'video', uid:123}?并且在服务器上,您可以将 uid 插入到选定的 Fluid 模板中。
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2016-09-17
  • 2013-05-18
  • 2015-11-07
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多