我在 javascript 中有一些变量:
var something = 1;
var url = "@CSRF(routes.Some.thing(something))";
我在编译期间遇到错误,因为“某物” 没有引用 javascript 变量,换句话说;编译器无法识别它。是否可以以某种方式转换/注入(inject) javascript 变量?此外,这是否在 javascript 中实时工作,或者我是否需要准备一个包含每个可能的“something”值的 "@CSRF(routes.Some.thing(something))" 数组?
这应该是一个简单的 rest 调用,在路由文件中可以看到:
/something/:something controllers.Some.thing(something : Long)
另一种方法是使用表单,但我不想这样做。
最佳答案
您需要使用 Javascript 路由并将 CSRF token 添加到请求中。
Javascript 路由描述:https://www.playframework.com/documentation/2.6.x/ScalaJavascriptRouting
看看我对问题的回答,并解释了如何将其用于 Assets (“正确且长期的解决方案”),其他事件的用法是相同的:How to update src of a img from javascript in a play framework project?
因此在您的情况下,Javascript 路由生成可能如下所示:
JavaScriptReverseRouter("jsRoutes")(
routes.javascript.Some.thing
)
在 JavaScript 中:
var something = 1;
var url = jsRoutes.controllers.Some.thing(something).url;
最后 - 不要忘记将 Csrf-Token
header 添加到请求中。
关于javascript - 在 play 框架中将 javascript 变量转换为 scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646563/