重定向到 .scala.html 文件(Scala Play)只显示纯文本
Redirect to .scala.html file (Scala Play) only shows plain text
我刚刚实现了 Google OAuth 混合服务器端流程,它需要 AJAX 调用来检索访问令牌。在我执行 AJAX 调用(存储令牌等)后,我希望服务器使用名为 home.scala.html 的文件显示一些内容。
//called when client has confirmed the OAuth Login dialog
function signInCallback(authResult) {
if (authResult['code']) {
$.ajax({
url: "http://localhost:9000/storeauthcode",
...
success: function(result) {
//access token was saved
//now redirect to the home area of the website
window.location.replace("http://localhost:9000/home");
},
error: function (xhr, status, error) {
//handle error appropriately here
...
}
});
}
}
但是,如果我获得令牌并且一切正常,我会看到我的 home.scala.html 文件的模板代码(因此它会打印 html 标记)但不会将其解释为 Html 应该由浏览器呈现。
如何让浏览器将 home.scala.html 文件呈现为 Html 文件而不是纯文本?
PS: 在这里进行重定向是否有意义,或者内容是否应该显示在同一页面上? Google 登录 window 关闭时看起来有点奇怪,用户必须等到他被重定向到实际站点。
我应该如何获取此内容(AJAX、AngularJS)?
您应该在 home.scala.html
中将参数声明为 Html
类型。您的代码看起来像这样:
@(title: String)(code: Html)
<head>
<title>@title</title>
</head>
<body>
@code
</body>
Play 生成 Javascript 代码来处理从客户端代码返回到您的应用程序的路由。那叫Javascript Routing.
首先你创建一个路由器:
public static Result javascriptRoutes() {
response().setContentType("text/javascript");
return ok(Routes.javascriptRouter("jsRoutes",
controllers.routes.javascript.Users.storeAuthCode()));
}
然后将其添加到您的路线文件中:
GET /javascriptRoutes controllers.Application.javascriptRoutes
还有你的HTML:
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
最后但同样重要的是,调用它的代码如下所示:
$.ajax(jsRoutes.controllers.Users.storeAuthCode())
.done( /*...*/ )
.fail( /*...*/ );
我刚刚实现了 Google OAuth 混合服务器端流程,它需要 AJAX 调用来检索访问令牌。在我执行 AJAX 调用(存储令牌等)后,我希望服务器使用名为 home.scala.html 的文件显示一些内容。
//called when client has confirmed the OAuth Login dialog
function signInCallback(authResult) {
if (authResult['code']) {
$.ajax({
url: "http://localhost:9000/storeauthcode",
...
success: function(result) {
//access token was saved
//now redirect to the home area of the website
window.location.replace("http://localhost:9000/home");
},
error: function (xhr, status, error) {
//handle error appropriately here
...
}
});
}
}
但是,如果我获得令牌并且一切正常,我会看到我的 home.scala.html 文件的模板代码(因此它会打印 html 标记)但不会将其解释为 Html 应该由浏览器呈现。
如何让浏览器将 home.scala.html 文件呈现为 Html 文件而不是纯文本?
PS: 在这里进行重定向是否有意义,或者内容是否应该显示在同一页面上? Google 登录 window 关闭时看起来有点奇怪,用户必须等到他被重定向到实际站点。
我应该如何获取此内容(AJAX、AngularJS)?
您应该在 home.scala.html
中将参数声明为 Html
类型。您的代码看起来像这样:
@(title: String)(code: Html)
<head>
<title>@title</title>
</head>
<body>
@code
</body>
Play 生成 Javascript 代码来处理从客户端代码返回到您的应用程序的路由。那叫Javascript Routing.
首先你创建一个路由器:
public static Result javascriptRoutes() {
response().setContentType("text/javascript");
return ok(Routes.javascriptRouter("jsRoutes",
controllers.routes.javascript.Users.storeAuthCode()));
}
然后将其添加到您的路线文件中:
GET /javascriptRoutes controllers.Application.javascriptRoutes
还有你的HTML:
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
最后但同样重要的是,调用它的代码如下所示:
$.ajax(jsRoutes.controllers.Users.storeAuthCode())
.done( /*...*/ )
.fail( /*...*/ );