从角度JS的控制器启用CORS

时间:2014-10-30 05:53:58

标签: javascript jquery angularjs cors

我有一个服务器控制器可以从其他服务器获取json,我来到这里

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http:somesite.com. This can be fixed by moving the resource to the same domain or enabling CORS.

我注意到"Access-Control-Allow-Origin": "*"在标题中会解决一些相同的问题。在我的案例中,我没有看到修复它的任何进展。

这是我的控制器的代码:

var myApp = angular.module('cplanner',[]);

myApp.controller('GetItemCtrl', ['$scope', '$http', function($scope, $http) {

    var itemUrl = 'http:somesite.com';

    //console.log(itemUrl);
    $http({url: itemUrl,
    dataType: 'json',
    method: 'POST',
    dataType : 'json',
    headers: {
       "Access-Control-Allow-Origin": "*",
       "Access-Control-Allow-Methods": "POST, GET, OPTIONS, PATCH, DELETE",
       "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"
    },
    xhrFields: {
        withCredentials: true
    }}).success(function(data, status, headers, config) {
        //check if the response has ok status
        if(data.status == "ok"){
        console.log(data.data);
            $scope.items = data.data;
        }


        }).error(function(data, status, headers, config) {


    });

}]);

我添加了标题但似乎没有修复我的交叉原点问题。任何人都可以通过任何评论和建议来驱动我如何能够从另一个服务器源获得响应。 提前谢谢你。

2 个答案:

答案 0 :(得分:2)

CORS是一种服务器解决方案 - 也就是说 - Web客户端(JS)发送到不同域(因此跨域)的第一个请求是OPTIONS请求 - 由原始服务器回复天气与否它尊重交叉域请求,如果是这样,它会回答:

   "Access-Control-Allow-Origin": "*",
   "Access-Control-Allow-Methods": "POST, GET, OPTIONS, PATCH, DELETE",
   "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"

然后浏览器发送另一个请求 - 要发送的实际请求。 整个机制自动发生。您所要做的就是在服务器上启用CORS。 为了启用CORS,这里有一些有用的链接:
ASP.NET WEBAPI
APACHE

答案 1 :(得分:0)

必须在服务器上启用CORS。如果您无法访问该服务器,您可能无法做到您希望做的事情。如果您确实有权访问,那么您需要阅读如何使用api编写的任何语言启用它:)

有关详细信息,请参阅此处:CORS request is not allowed with AngularJS