无法使用Angularjs执行CORS请求

时间:2014-01-09 12:01:38

标签: angularjs

我正在编写我的第一个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来实现此功能。知道我在这里做错了什么吗?

谢谢!

5 个答案:

答案 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'
    },