【问题标题】:Redirect to .scala.html file (Scala Play) only shows plain text重定向到 .scala.html 文件(Scala Play)仅显示纯文本
【发布时间】:2015-05-01 12:17:55
【问题描述】:

我刚刚实现了需要 AJAX 调用来检索访问令牌的 Google OAuth 混合服务器端流程。在我进行 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 登录窗口关闭并且用户必须等到他被重定向到实际站点时,看起来有点奇怪。

我应该如何获取这些内容(AJAX、AngularJS)?

【问题讨论】:

    标签: javascript ajax scala playframework playframework-2.3


    【解决方案1】:

    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( /*...*/ );
    

    【讨论】:

      【解决方案2】:

      您应该在home.scala.html 中将参数声明为Html 类型。您的代码将如下所示:

      @(title: String)(code: Html)
      
      <head>
        <title>@title</title>
      </head>
      <body>
        @code
      </body>
      

      【讨论】:

      • 对不起,我不明白你的意思。问题是,如果我通过 Javascript 重定向到 scala.html 页面,我会看到纯文本而没有 HTML。所以我不明白这与模板中的参数有什么关系。
      • 哦,我明白了。所以基本上scala.html 文件本身不是 HTML。那就是将被编译成 HTML 的代码。为此,您应该生成一个Javascript router
      • 显然是这样。我知道。但这并不能解决问题。所以问题基本上是,当您访问路由文件中指定的相应路由时,如何使服务器编译 .scala.html 文件?
      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2016-07-25
      • 2022-10-05
      • 2015-06-27
      • 2018-07-24
      相关资源
      最近更新 更多