使用AngularJS的跨域请求不起作用

时间:2014-11-27 16:27:28

标签: javascript angularjs

我需要使用Angular进行跨域请求,但是我收到了错误

XMLHttpRequest cannot load http://machine_name_in_my_network:8082/GetAll. No
     

请求中存在“Access-Control-Allow-Origin”标头   resource. Origin 'http://localhost:53379' is therefore not allowed   访问。响应的HTTP状态代码为500。

我看到了here一个解决方案示例,但对我没用。

这是我的本地主机向我网络中的计算机发出的请求,应该返回JSON。

代码段

//Controller 
function crmContatosCtrl($scope, apiService) {
    apiService.get('/GetAll').then(function (data) {
       $scope.contatos = data;
    });

然后来到我的服务

function comWebApi_Service($http, $log) {
    return {
        get: function (url, data) {

            //return $http.jsonp(ApiURL + url)
            //    .success(function (data) {
            //        debugger;
            //    })
            //    .error(function (data) {
            //        debugger;
            //    });

            return $http.get(ApiURL + url, data).then(
                function (res) {                
                    return res.data;
                });
        },

    angular
        .module('app')
        .config(['$httpProvider', function($httpProvider) {
            $httpProvider.defaults.useXDomain = true;
            delete $httpProvider.defaults.headers.common['X-Requested-With'];
        }])
        .service('apiService', comWebApi_Service);

2 个答案:

答案 0 :(得分:1)

这是服务器方面缺少的代码,而不是浏览器AngularJS代码中的代码。使用最近的angularjs构建,需要这些行中的任何一行。这些都是基于过时的信息(它们不会破坏任何东西,它们只是不必要的并且基于过时的copypasta):

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

您的服务器代码需要在其HTTP响应中添加必要的CORS标头,因此请维护人员这样做或发布服务器端代码片段,我们可以帮助解决这个问题。

答案 1 :(得分:1)

您需要在服务器上启用cors

e.g。全局初始化

    var cors = new EnableCorsAttribute("*", "*", "*");
    config.EnableCors(cors);

详细了解here ...阅读Scope Rules for [EnableCors]

部分