6

我希望能够使用 $resource 使用 CORS 来请求我的数据来设置资源。我已经让 CORS 与 $http 一起工作,但同样的技术不适用于 $resource,我希望有人能来拯救我并告诉我如何使用 $resource。

我修改了Angular 教程的最后一步,通过在 services.js 文件中破解 phonecatServices 服务来使用 CORS。

我发现这个例子使用了 $http.defaults.useXDomain = true; 删除 $http.defaults.headers.common['X-Requested-With'];line 以获取角度以使用 CORS 请求数据,但如果我尝试 $resource.defaults.useXDomain = true; 我收到错误:“无法设置未定义的属性‘useXDomain’”。

我认为 $resource 没有这个属性,所以我的问题是,如何配置 $resource 以使用 CORS 进行跨域资源请求。

这是我的代码:

angular.module('phonecatServices', ['ngResource']).
    factory('Phone', function($resource){
  return $resource('http\\://localhost\\:8080/:phoneId.json', {}, {
    query: {params:{phoneId:'phones'}, isArray:true}
  });
});

当我尝试发出请求时出现以下错误:对象 #<Resource> 没有方法 'push'

编辑

我已经尝试设置 $http 并且它大部分时间都可以工作,但是当调用资源查询时,在本例中为 Phone.get(phoneId); 这似乎引发了上述错误。

调用我怀疑导致错误的代码(来自 controllers.js step 11 angular tutorial):

function PhoneDetailCtrl($scope, $routeParams, Phone) {
  $scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
    $scope.mainImageUrl = phone.images[0];
  });

  $scope.setImage = function(imageUrl) {
    $scope.mainImageUrl = imageUrl;
  }
}

如果我删除上述方法的内部代码,代码运行良好(没有获取网站的图像),但我不明白为什么这不起作用?我已经将 $http 服务设置为使用 CORS,因此显然应该将其传递给 $resource。

任何人都可以阐明它吗?(任何工作示例代码将不胜感激)。

编辑:13/08/13

就像任何访问这个问题的人都知道,下面的答案都没有真正回答这个问题,我自己正在研究一个答案,但如果有人发现这个并有一个答案,我仍然会非常感激。

编辑:06/09/13

目前正在调查这个项目,似乎允许我正在寻找的一切:https ://github.com/jpillora/xdomain

4

3 回答 3

3

好的,我为我的项目找到的解决方案是 xdomain:https ://github.com/jpillora/xdomain

我承认这可能并不适合所有人,但它是一个不错的跨浏览器解决方案,虽然我们被 IE<10 困住,但这似乎是最好的解决方案。(我知道 IE8 和 IE9 提供部分支持,但与往常一样,IE 并不完全支持,我不想浪费时间为 IE 做另一项工作)。

感谢所有提供问题答案的人。

于 2013-11-12T11:46:24.367 回答
0

我认为这个样本可以为你工作

angular.module('myBeerApp.services', ['ngResource']).
  value('version', '0.1').
  factory('beerDB', function($resource) {
    return $resource('URL',{
      alt:'json',
      appToken:'TOKEN',
      q:'rock',
      callback: 'JSON_CALLBACK'
    },
      {
        get: {
          method:'JSONP',
          headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
            }
          }
      });
  });
于 2013-06-12T14:55:55.080 回答
-1

你在 app.config(); 中调用 useXDomain = true 吗?

于 2013-09-17T13:30:30.207 回答