关于jquery:使用Play Framework和Angularjs从localhost重定向问题

Redirect issue from localhost using Play Framework & Angularjs

我在我的应用程序中使用Play Framework和Angularjs。 我的要求是根据在UI上选择的一些参数重定向Play框架页面。

这是我的代码,

在页面上我打开了bootstrap模态对话框,并在提交动作上调用angular post方法,

1
2
3
4
5
6
7
8
9
10
11
12
$scope.loginToExt = function() {

  var data = $scope.env;

  $http.post('/login', {env: data})
    .success(function(data){
      //$scope.env = data
    })
    .error(function(data){
      console.log(data)
    });
};

一旦我点击提交我的模态,它将调用'/ login'并根据我的路由映射将调用action方法如下,

1
2
3
4
5
6
7
8
9
def login = Action(parse.json) { implicit request =>
val env = (request.body "env").as[String]

env match {
  case _ => {
    Redirect("https://google.com")
      .withHeaders(ACCESS_CONTROL_ALLOW_ORIGIN ->"*")
  }
}

路由文件如下,

1
POST     /login             controllers.Application.login

我不知道问题是什么,但我收到如下错误,无法重定向我的页面。

XMLHttpRequest cannot load https://google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.


我相信你遇到的问题是因为你试图在ajax($ http.post)调用中重定向,请看这篇文章:

Your server side code cannot redirect the browser from an ajax
response.

使用$ http.post和res.redirect而不解析promise

也可以看看:
处理Angular POST的快速重定向

不要尝试从Play重定向,而是考虑使用重定向的url返回响应,然后在成功回调中,从那里重定向:

1
$window.location.href="https://google.com";

(记得注入$ window)


通过观察
https://gist.github.com/mitchwongho/78cf2ae0276847c9d332,
您必须在Global.scala文件中的HeaderNames.ACCESS_CONTROL_ALLOW_HEADERS中添加"access-control-allow-origin"。