ビュー内のコントローラーからアクションを呼び出すために、AJAX 内でリバース ルーティングを使用しています。
<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
。交換したい
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) を指していますが、これは意味がありません。そこには "()" はありません。しかし、私は他に何も変更しておらず、行方不明の ')' をどこにも見つけることができません。近づいた気がするけど、なかなか手に入らない。