Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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
在play框架中将javascript变量转换为scala_Javascript_Scala_Playframework_Csrf - Fatal编程技术网

在play框架中将javascript变量转换为scala

在play框架中将javascript变量转换为scala,javascript,scala,playframework,csrf,Javascript,Scala,Playframework,Csrf,我在javascript中有一些变量: var something = 1; var url = "@CSRF(routes.Some.thing(something))"; 我在编译过程中出错,因为“something”没有引用javascript变量,换句话说;编译器无法识别它。是否可以以某种方式转换/注入javascript变量?另外,这在javascript中是实时工作还是需要准备一个包含每个可能的“某物”值的“@CSRF(routes.Some.thing(something))”数

我在javascript中有一些变量:

var something = 1;
var url = "@CSRF(routes.Some.thing(something))";
我在编译过程中出错,因为“something”没有引用javascript变量,换句话说;编译器无法识别它。是否可以以某种方式转换/注入javascript变量?另外,这在javascript中是实时工作还是需要准备一个包含每个可能的“某物”值的“@CSRF(routes.Some.thing(something))”数组

这应该是一个简单的rest调用,如routes文件所示:

/something/:something controllers.Some.thing(something : Long)

另一种选择是使用表单,但我不想这样做。

您需要使用Javascript路由并将CSRF令牌添加到请求中

Javascript描述:

请看我对问题的回答,并解释如何将其用于资产(“正确且长期的解决方案”),其他活动的用法相同:

因此,在您的情况下,Javascript路由生成可以如下所示:

JavaScriptReverseRouter("jsRoutes")(
  routes.javascript.Some.thing
)
在JavaScript中:

var something = 1;
var url = jsRoutes.controllers.Some.thing(something).url;

最后一个-不要忘记在请求中添加
Csrf Token
头。

尽管play&twirl的整个过程看起来很神奇,但它仍然有一个“限制”,即模板内容是在服务器上填写的,而javascript变量
something
存在于用户的浏览器中,页面在服务器上呈现并通过网络发送后很久。由于
play
无法看到未来(也无法看到用户的浏览器),因此这似乎是不可能的。但是,您可以预先计算许多不同的路由,然后在JS中添加一些逻辑,以便在客户端选择正确的URL…@Andreytukin是的,这就是我的想法。。。这就是为什么我建议“准备一个“@CSRF(routes.Some.thing(something))”数组,其中包含每个可能的“something”值。这是好的做法吗?我有多个实体,每个实体都有几个选项。所以,有很多路线。我不确定这是否是一个好的做法。。。我可能会尝试将整个路由重新构造为一个带有参数的普通ajax请求,然后在服务器端决定重定向到哪里。你看过了吗?还有一些链接可能会有所帮助。我最终构建了csrf令牌,如下所示:“@play.filters.csrf.csrf.getToken.get.value”,我将其添加到url中,或者在ajax调用中添加头。