在我看来,我在 AJAX 中使用反向路由从控制器调用 Action:
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("toolOptions").innerHTML =
this.responseText;
}
};
xhttp.open("GET", "@routes.MyController.loadTemplate2()", true);
xhttp.send();
}
</script>
我在 app.controllers.MyController 的控制器有一个方法:
def loadTemplate2() = Action {
implicit request: Request[AnyContent] => Ok(views.html.template2())
}
路由如下:
GET /mycontroller/retrieve2 controllers.MyController.loadTemplate2
当我像这样对路由进行硬编码并从模板中的某个位置调用它时<li onclick="loadDoc()">Load Template 2</li>
,它按预期工作并加载模板 2。但是,这种方法很有用,我希望能够参数化由 调用的 URL xhttp.open
,所以我想换
function loadDoc()
function loadDoc(myURL)
和_
xhttp.open("GET", "@routes.MyController.loadTemplate2()", true);
和
xhttp.open("GET", myUrl, true);
然后能够调用我可能拥有的其他方法,例如:
def loadTemplate3() = Action {
implicit request: Request[AnyContent] => Ok(views.html.template2())
}
从模板中的其他地方<li>
类似:
<li onclick="loadDoc(@routes.MyController.loadTemplate2())">Load Template 2</li>
<li onclick="loadDoc(@routes.MyController.loadTemplate3())">Load Template 3</li>
但是当我这样做时,它不起作用。控制台告诉我 SyntaxError: invalid regular expression flag d
我也尝试过这样做
<li onclick="loadDoc(@routes.MyController.loadTemplate2())">Load Template 2.absoluteURL(true)</li>
但这告诉我在控制台中的参数列表[了解更多]之后的 SyntaxError: missing )。错误消息指向生成的 HTML (1:13) 标题中的一行,这没有任何意义 - 上面没有任何“()”。但是我没有改变其他任何东西,并且在任何地方都找不到任何丢失的')'。我觉得我很接近,但不能完全明白。