6

CORS を使用して $resource を使用してリソースをセットアップし、データを要求できるようにしたいと考えています。私は CORS を $http で動作させていますが、同じ手法は $resource には適用されません。

services.js ファイルで phonecatServices サービスをハッキングして、CORS を使用するように Angular チュートリアルの最後のステップを変更しました。

$http.defaults.useXDomain = true; を使用するこの例を見つけました。$http.defaults.headers.common['X-Requested-With']; 行を削除して、CORS を使用してデータを要求する角度を取得しますが、試してみると $resource.defaults.useXDomain = true; になります。エラーが表示されます:「未定義のプロパティ 'useXDomain' を設定できません」。

$resource にはこのプロパティがないと思われるので、私の質問は、CORS を使用してクロスドメイン リソース リクエストを行うように $resource を構成するにはどうすればよいかということです。

これが私のコードです:

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

リクエストを作成しようとすると、次のエラーが表示されます: Object #<Resource> has no method '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;
  }
}

上記のメソッドの内部を削除すると、コードは (Web サイトの画像を取得せずに) 正常に実行されますが、なぜこれが機能しないのかわかりません。CORS を使用するように $http サービスを設定したので、明らかに $resource に渡す必要があります。

誰でもそれに光を当てることができますか?(動作するサンプルコードは大歓迎です)。

編集:13/08/13

この質問にアクセスした人なら誰でも知っているように、以下の回答はどれも実際には質問に答えていません.

編集: 06/09/13

現在、このプロジェクトを調査していますが、私が探しているものはすべて許可されているようです: https://github.com/jpillora/xdomain

4

3 に答える 3

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 に答える