我正在编写我的第一个AngularJS应用程序,并且在Angular中遇到了CORS的问题。尝试了reply中提到的内容,但仍然没有运气解决这个问题。
JS代码(main.js)如下:
var app = angular.module("app",[]);
app.config(['$httpProvider', function($httpProvider) {
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
app.controller("AppCtrl", function ($scope, $http) {
var postData = "username=demo&password=demo";
$http.post("http://sampleurl.com/login",postData).success(function(data, status, headers, config)
{
console.log(data);
});
});
Index.html文件是:
<!DOCTYPE html>
<html>
<head>
<title>Sample Angular App</title>
</head>
<body ng-app="app" ng-controller="AppCtrl as app">
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js"></script>
<script src="main.js"></script>
</body>
</html>
我得到的错误如下:
Failed to load resource: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
我尝试使用Ajax运行此请求,它可以很好地与Ajax一起使用。出于某种原因,无法使用Angular来实现此功能。知道我在这里做错了什么吗?
谢谢!
答案 0 :(得分:4)
确定。所以基本上经过很多修补我知道params没有通过使用
$http.post("http://sampleurl.com/login",postData)
所以我重写了这个请求如下:
$http({
url:'http://sampleurl.com/api',
method:"POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: postData
})
这得到了要求通过就好了。希望这对其他人有帮助。
干杯!
答案 1 :(得分:2)
您需要做两件事,在.config中需要这样做:
$httpProvider.defaults.withCredentials = true;
然后在您的服务器上,您需要返回一个Access-Control-Allow-Origin标头,它可能如下所示:
Access-Control-Allow-Origin:http://URL_OF_SITE_YOUR_ANGULARJS_APP_IS_AT
答案 2 :(得分:0)
如果您要发送CORS请求&#39; withCredentials &#39;,您需要让服务器回复“访问控制 - 允许 - 原点&#39;:&#39;的 HTTP(S)://your.request.origin 强>&#39 ;.对于凭据的请求,大多数浏览器都会拒绝 >> 。
答案 3 :(得分:0)
我遇到了同样的问题,然后我从这个链接中读到: http://better-inter.net/enabling-cors-in-angular-js/
事情就像魅力一样:)var myApp = angular.module('myApp', [
'myAppApiService']);
myApp.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
答案 4 :(得分:0)
之前我遇到了同样的问题,我通过添加此标题来解决它:
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},