繁体   English   中英

使用AngularJS发送HTTP请求到另一个域

[英]send HTTP request using AngularJS to another domain

我一直在使用django-rest-framework开发API。

但是,当我在本地主机上运行虚拟Web服务器并尝试向api发送请求时,出现此错误

XMLHttpRequest cannot load http://127.0.0.1:8000/users?format=json. No ' Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

经过快速搜索后,我意识到问题是我将请求发送到其他域(在我的情况下为其他端口),并且可以通过安装一些新应用程序来解决该问题。 但是,我不想在django中这样做,而是通过编辑我发出请求的方式。 我现在就是这样的:

Geonix.controller('mainController', function($scope, $http) {
          var config = { headers: {'Content-Type': 'application/json; charset=utf-8'}};
            $http.get('http://127.0.0.1:8000/users?format=json', config).success(function(data) {
                $scope.users = data;
            });
        });

有没有办法在不更改后端的情况下获得正确的响应? 请注意,实际服务器上的api和网页也将在不同的端口上运行,因此问题仍然存在。

您应该使用django-cors或可以使用JSONP,但它仅接受get请求。

正如其他人所说,您应该真正考虑使用django-cors-middleware

如果您拥有正确的Auth方法,或者应该公开使用该API,则可以继续在CORS_ORIGIN_ALLOW_ALL = True上设置CORS_ORIGIN_ALLOW_ALL = True ,以获取超快速解决方案。 恐怕除此之外您无能为力。

我曾经通过在<img>标签中加载一些路由来避开CORS,但这是一种超级hacky的方法,用于在无法控制服务器的情况下必须尽快运行的非常具体的概念证明。 在那种情况下,我只需要触摸服务器的路由即可执行某些操作,它就是一台Node.js服务器。 建议您尝试绕过CORS,特别是考虑到使用django-cors-middleware多么容易。

作为补充,django-cors-headers不再维护。 如果您的Django安装版本为1.10或更高版本,则需要使用django-cors-middleware。

Angular正在您的Django应用上执行飞行前OPTIONS请求,但未在Django上启用CORS。 如果您能够在Django中激活CORS,则可以省去很多麻烦。

另一个选择是使用JSONP,这也是您必须在Django中进行的配置更改。

但是问题特别是关于在不修改Django的情况下发出请求。

在这种情况下,由于您的内容类型为“ application / json”,因此启用了预检。 如果将其更改为“文本/纯文本”,Angular将跳过预检并拨打电话。

由于结果数据将是纯文本,因此您可以使用JSON.parse()将其转换为对象:

var config = { headers: {'Content-Type': 'text/plain; charset=utf-8'}};
$http.get('http://127.0.0.1:8000/users?format=json', config).success(function(data) {
  $scope.users = JSON.parse(data);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM