【问题标题】:AngularJS: No "Access-Control-Allow-Origin" header is present on the requested resource [duplicate]AngularJS:请求的资源上没有“Access-Control-Allow-Origin”标头[重复]
【发布时间】:2015-06-15 07:42:03
【问题描述】:

我正在编写我的 webApp,并且正在使用 AngularJS。在这个应用程序中,我创建了一个名为 script.js 的文件,并报告了这段代码:

var modulo = angular.module('progetto', ['ngRoute']);

    // configure our routes
    modulo.config(function ($routeProvider, $httpProvider) {
        $routeProvider

            // route for the home page
            .when('/', {
                templateUrl: 'listaFilm.html',
                controller: 'listaController'
            })

            // route for the description page
            .when('/:phoneName', {
                templateUrl: 'description.html',
                controller: 'descriptionController'
            });


            $httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*';

    });


    modulo.controller('listaController', function ($scope, $http) {
        $http.get('https://api.getevents.co/event?&lat=41.904196&lng=12.465974').success(function (data) {
            $scope.names = data;
            }).
            error(function (data, status) {
                $scope.names = "Request failed";
            });
    });

使用这段代码,我按照 RESTful 原则调用 API。当我运行代码时,我遇到了这个问题:

XMLHttpRequest 无法加载 https://api.getevents.co 否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:8383” 访问。

在网上阅读后,我了解到我遇到了一个名为 CORS 的问题...我尝试了几种建议的解决方案,但都没有解决问题。
我该如何解决这个问题?
我必须添加什么代码来修复它?

【问题讨论】:

  • https://api.getevents.co 需要在其响应中提供 CORS 标头。您是否控制(或者您可以以其他方式配置)https://api.getevents.co 的服务器?服务器需要改变它的行为。
  • 并非所有 API 都可以通过 ajax 访问,如果它们未启用 CORS 或未启用 jsonp。检查 API 文档或使用代理
  • 我控制,这就是响应:我们的 API 支持 CORS(跨源资源共享),这意味着它可以使用 JavaScript 直接从浏览器调用,或者更传统地使用后端从服务器调用-您选择的结束语言。
  • 我应该设置 $http 标头,但我不这样做
  • 这个答案可能有用:stackoverflow.com/a/58064366/7059557

标签: javascript html angularjs xmlhttprequest cors


【解决方案1】:

这是服务器端问题。您不需要为 cors 添加任何有角度的标题。 您需要在服务器端添加标头:

Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Origin: *

这里的前两个答案:How to enable CORS in AngularJs

【讨论】:

  • 我在代码中如何以及在何处编写此代码?
  • 这将取决于您的服务器技术,我找到了一个很好的选择 w3 链接:w3.org/wiki/CORS_Enabled
  • Access-Control-Allow-Origin: * 解决了我的问题。作为记录,我构建了一个 Go 微服务,w.Header().Add("Access-Control-Allow-Origin", "*") 是实际工作的行。
  • @Sion Cav 你添加你的解决方案作为答案好吗?很高兴看到你是如何/在哪里做到这一点的。
  • 对于Springboot 应用程序,在其余控制器中添加@CrossOrigin 对我有用。
【解决方案2】:

CORS 是跨域资源共享,如果您尝试从一个域访问另一个域,则会出现此错误。

尝试使用 JSONP。在您的情况下,JSONP 应该可以正常工作,因为它只使用 GET 方法。

试试这样的:

var url = "https://api.getevents.co/event?&lat=41.904196&lng=12.465974";
$http({
    method: 'JSONP',
    url: url
}).
success(function(status) {
    //your code when success
}).
error(function(status) {
    //your code when fails
});

【讨论】:

  • 超级。非常感谢!
  • 我的荣幸..!!!!
  • 由于这些成功和错误方法不可链接,因此它们已从 Angular 中删除。我们应该使用.then()stackoverflow.com/questions/35329384/…
  • 那么post、put和delete呢??
  • JSONP 只支持 GET
猜你喜欢
  • 2014-07-30
  • 2021-09-25
  • 2017-02-07
  • 2023-03-16
  • 2016-01-14
  • 2023-03-15
  • 2018-12-02
  • 2019-01-13
  • 2018-12-29
相关资源
最近更新 更多