2015-09-27 70 views
0

我正在为我的应用程序使用Play Framework和Angularjs。我的要求是根据在UI上选择的某个参数重定向Play框架页面。使用Play Framework和Angularjs从本地重定向问题

这里是我的代码,

上页我打开引导模式对话框,并在提交行动呼吁角度支柱方法,

$scope.loginToExt = function() { 

    var data = $scope.env; 

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

一旦我点击我的模式提交,它会调用“/登录”并根据我的路由映射将调用下面的操作方法,

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 -> "*") 
    } 
} 

路由文件如下,

POST  /login    controllers.Application.login 

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

XMLHttpRequest无法加载https://google.com/。请求的资源上没有“Access-Control-Allow-Origin”标题。因此不允许访问原产地'http://localhost:9000'。

回答

1

我相信你遇到的问题是因为你想的AJAX($ http.post)调用内部重定向,看到这个帖子:

你的服务器端代码无法从浏览器重定向ajax 回应。

Using $http.post and res.redirect without resolving the promise

参见: Handle an express redirect from Angular POST

而不是试图从播放重定向,请考虑您的成功调用返回与重定向的URL的响应,然后再从那里重定向:

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

(记得要注资$窗口)

+0

感谢您的帮助......但有什么方法可以将其从Play控制器重定向吗? – Nishan

+0

我不这么认为。请参阅http://stackoverflow.com/a/15996968/1956540,在它的评论中指出,由于XHR请求的性质,以这种方式重定向不起作用。 – BatteryAcid

+0

再次感谢您的时间。这似乎很难实现这个使用JavaScript,所以我已经取代了JavaScript逻辑与播放HTML形式和基于控制器的本机逻辑。目前没有使用JavaScript,现在它按预期工作。 – Nishan