Как включить запрос cors с помощью angular.js-resource

У меня есть приложение angular.js, и мне нужно выполнить запрос CORS.

Я хочу определить мои остальные службы "угловые", используя ресурсы angular, описанные здесь: http://docs.angularjs.org/tutorial/step_11.

Но я не нашел способ заставить это работать. В Google я нашел следующий пример кода: http://jsfiddle.net/ricardohbin/E3YEt/, но это, похоже, не работает с угловыми ресурсами.

это мое приложение.js

'use strict';

angular.module('corsClientAngularApp', ['helloServices'])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

это мои services.js с остальными сервисами

angular.module('helloServices', ['ngResource']).
    factory('Hello', function($resource){
  return $resource('http://localhost:8080/cors-server/hello/:name', {}, {
    query: {method:'GET', params:{name:'name'}, isArray:false}
  });
});

Это мой main.js с контроллером, использующим $http, это работает!:

'use strict';

angular.module('corsClientAngularApp')
  .controller('MainCtrl', function ($scope, $http, Hello) {
    $http.defaults.useXDomain = true;


    $http.get('http://localhost:8080/cors-server/hello/stijn')
        .success(function(data) {
            $scope.hello = data;
        });
  });

Это еще одна версия моего main.js, использующая ресурсы angular. Это не работает :(

'use strict';

angular.module('corsClientAngularApp')
  .controller('MainCtrl', function ($scope, $http, Hello) {
    $http.defaults.useXDomain = true;
    $scope.hello = Hello.query({name:'stijn'});
  });

Это заголовки из рабочего запроса (из chrome devtools):

Request URL:http://localhost:8080/cors-server/hello/stijn
Request Method:OPTIONS
Status Code:200 OK

Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:accept, origin, x-requested-with
Access-Control-Request-Method:GET
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31

Response Headers
Access-Control-Allow-Headers:accept, origin, x-requested-with
Access-Control-Allow-Methods:GET
Access-Control-Allow-Origin:*
Content-Length:0
Date:Thu, 25 Apr 2013 10:42:34 GMT
Server:Apache-Coyote/1.1

А это заголовки НЕ работающего запроса:

Request URL:http://localhost/cors-server/hello/stijn
Request Method:OPTIONS
Status Code:200 OK

Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:accept, origin, x-requested-with
Access-Control-Request-Method:GET
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31


Response Headers
Allow:GET,HEAD,POST,OPTIONS,TRACE
Connection:Keep-Alive
Content-Length:0
Content-Type:text/plain
Date:Thu, 25 Apr 2013 10:41:12 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.22 (Win32)

Похоже, что URL-адрес запроса неверен при использовании угловых ресурсов. Но почему?

Спасибо!


person cremersstijn    schedule 25.04.2013    source источник
comment
does NOT work не является определением проблемы. Проверьте запрос в консоли браузера и предоставьте более подробную информацию   -  person charlietfl    schedule 25.04.2013
comment
Я добавил заголовки запроса   -  person cremersstijn    schedule 25.04.2013


Ответы (1)


URL-адрес для $resource допускает использование двоеточия для параметров. Поэтому при использовании порта в URL-адресе вам нужно избегать двоеточия для порта. Это объясняется в документах $resource.

person charlietfl    schedule 25.04.2013
comment
Это сработало, но теперь я получаю {0:h,1:e,2:l,3:l,4:o,5: ,6:s,7:t,8:i,9:j,10:n } вместо привет стийн. Как я могу это исправить? - person cremersstijn; 25.04.2013
comment
@cremersstijn $resource ожидает, что будет возвращен объект со свойствами. Он принуждает вашу строку к этому объекту, назначая каждую позицию символа как свойство с символом в качестве значения. - person c0bra; 31.05.2013
comment
где именно в документации ресурса описано экранирование порта? - person Milen Kovachev; 18.12.2014