2014-01-09 51 views
1

我正在編寫我的第一個AngularJS應用程序,並在Angular中遇到CORS問題。嘗試了這個reply中提到的內容,但仍然沒有解決這個問題的運氣。無法使用Angularjs執行CORS請求

的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獲得此功能。任何想法,我在這裏做錯了嗎?

謝謝!

回答

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 
    }) 

這讓經歷就好了請求。希望這對別人有幫助。

乾杯!

+0

男人,你讓我的日子變得如此之美!我在這個問題上苦苦掙扎!!!謝謝,謝謝! (PS:來自Angular的一些「角度」,我不太喜歡:-D) –

2

有兩件事情你需要做的,在.config你需要把這樣的:

$httpProvider.defaults.withCredentials = true; 

然後在服務器上,你需要返回存取控制允許來源頭,它可能看起來像這樣:

Access-Control-Allow-Origin:http://URL_OF_SITE_YOUR_ANGULARJS_APP_IS_AT 
+0

嘿@Matthew,謝謝你。我添加了.withCredentials行,並且至少沒有'Access-Control-Allow-Origin'標頭錯誤消失了。再次運行代碼後,我看到一個OPTIONS在控制檯中返回,這很奇怪,因爲請求是POST。我檢查了請求,並將Origin設置爲NULL。在服務器端,編程了「Access-Control-Allow-Origin」:「*」, – user1748009

+0

這就是CORS的工作原理,會有一個選項請求。 HTTP://en.wikipedia。org/wiki/CORS –

0

如果你想發送CORS請求「withCredentials」,你需要有「訪問控制允許來源」服務器的回覆:」 HTTP(S)://your.request .origin'。對於具有憑據的請求,通配符(*)回覆將爲拒絕由大多數瀏覽器拒絕。

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']; 
    } 
]); 
0

我有同樣的問題之前,我解決它通過添加此標頭:

headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
    },