Zagadnienia AngularJS CORS
Przeszukałem ponad 200 stron (być może przesadzając, ale niewiele) na temat tego, jak radzić sobie z cors z angularjs. Mamy lokalną maszynę z serwerem WWW API. Tworzymy klienta, który wywołuje API dla danych. Podczas uruchamiania klienta z serwera nie mamy problemu z danymi. Gdy uruchomimy go z innej domeny, otrzymamy czerwoną odpowiedź 200 podczas próby pobrania danych i pustej odpowiedzi. Oto kod:
var myApp = angular.module('Project', ['ngResource']);
myApp.config(function($routeProvider){
$routeProvider.
when('/new', {templateUrl:'templates/new.html', controller:'EditProjectController'}).
when('/mobile', {templateUrl:'templates/mobile.html', controller:'ProjectController'}).
when('/it', {templateUrl:'templates/it.html', controller:'ProjectController'}).
when('/writing', {templateUrl:'templates/writing.html', controller:'ProjectController'}).
when('/all', { templateUrl: 'templates/all.html' }).
when('/login', { templateUrl: 'partials/_login.html' }).
otherwise({ redirectTo: '/all' });
});
myApp.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
myApp.controller('ProjectController',
function myApp($scope, $http, projectDataService, userLoginService) {
$http.defaults.useXDomain = true;
$scope.loadProject = function(){
projectDataService.getProject(function(project){
$scope.project = project;
})
};
$scope.loadProject();
}
);
myApp.factory('projectDataService', function ($resource, $q) {
var resource = $resource('http://webapiserver/api/:id', { id: '@id' });
return {
getProject: function () {
var deferred = $q.defer();
resource.query({ id: 'project' },
function (project) {
deferred.resolve(project);
},
function (response) {
deferred.reject(response);
});
return deferred.promise;
},
save: function (project) {
var deferred = $q.defer();
project.id = 'project/9';
resource.save(project,
function (response) { deferred.resolve(response); },
function (response) { deferred.reject(response); }
);
return deferred.promise;
}
};
});
Wypróbowałem to także za pomocą $ http, ale otrzymuję tę samą odpowiedź (lub jej brak):
myApp.factory("projectDataService", function ($http) {
return {
getProject: function (successcb) {
$http.get("http://webapiserver/api/project").
success(function (data, status, headers, config) {
successcb(data);
}).
error(function (data, status, headers, config) {
}
};
});
Kiedy przeglądam adres URL, który służy jsonowi w przeglądarce, wypluwa dane. Na serwerze zezwalamy na powstawanie powiązań między domenami, co jest widoczne w moim poprzednim oświadczeniu. Jak widać implementuję nadpisania nagłówków w myApp.config Próbowałem nawet umieścić je bezpośrednio w kontrolerze ... bez różnicy ...
3 dni na to zadanie.
Pomoc w tym jest WIĘCEJ niż doceniana. Z góry dziękuję.