重定向到 .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( /*...*/ );