我在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.但是,这种方法很有用,我希望能够参数化xhttp.open
调用的URL,所以我想替换
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:无效的正则表达式标志d
我也尝试过这样做
<li onclick="loadDoc(@routes.MyController.loadTemplate2())">Load Template 2.absoluteURL(true)</li>
但这告诉我SyntaxError:missing)在控制台中的参数列表[了解更多]之后。错误消息指向生成的HTML(1:13)标题中的一行,这没有任何意义 - 那里没有任何“()”。但是我没有改变任何其他东西,也无法在任何地方发现任何遗漏。我觉得我很亲密,但不太明白。
答案 0 :(得分:0)
我在here上简化了这个问题,答案取自两位回应者:
有两个问题。我试图传递一个字符串文字和
@routes.MyController.loadTemplate2()
在呈现的HTML /theUrl/toTheServer
问题是,用/
开始表示您将使用正则表达式。
改变这个:
<li onclick="loadDoc(@routes.MyController.loadTemplate2())">Load Template 2</li>
到
<li onclick="loadDoc('@routes.MyController.loadTemplate2()')">Load Template 2</li>
或
<li onclick="loadDoc("@routes.MyController.loadTemplate2()")">Load Template 2</li>