CORS

2013-05-14 16 views
6

kullanarak başka bir etki alanındaki verileri almak için Angular $ resource (ngResource) nasıl yapılandırılır Verilerimi istemek için CORS kullanarak $ resource kullanarak kaynakları ayarlayabilmek istiyorum. CORS $ http ile çalışıyorum ama aynı teknikler $ kaynak için geçerli değil ve birisinin benim kurtarıma gelip bana nasıl $ kaynak ile geleceğini umuyordum.CORS

services.js dosyasında phonecatServices hizmetini keserek CORS kullanmak için değiştirdim.

$ http.defaults.useXDomain = true; kullanan this example buldum. $ http.defaults.headers.common ['X-Istenen-With'] satırını sil; CORS kullanarak veriyi talep etmek için açısal çizgi almak, ancak eğer $ resource.defaults.useXDomain = true; Hatayı alıyorum: "Unsur undefined 'useXDomain' özelliği ayarlanamıyor".

$ source kaynağının bu özelliği olmadığını varsayarsak, sorum şu, CORS kullanarak çapraz etki alanı kaynak istekleri yapmak için $ resource'ı nasıl yapılandırabilirim. Ben istek yapmak çalıştığımda aşağıdaki hatayı alıyorum

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

: Burada

kodum var Nesne # <Kaynak> hiçbir yöntem push '

DÜZENLEMEYİ sahiptir

Ben $ http için ayarlamayı denedim ve çoğu zaman çalışır, ancak arama, kaynak sorguya yapıldığında, bu durumda Phone.get (phoneId); Bu yukarıdaki hatayı atmak gibi görünüyor.

I (controllers.js gelen step 11 angular tutorial) hataya neden olan şüpheli

Arama kodu: Ben kod iyi çalışır yukarıdaki yöntemin bağırsaklar kaldırırsanız

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 sitesi için görüntüyü almaksızın) ama bunun neden işe yaramayacağını anlamıyorum. CORS'i kullanmak için $ http hizmetini kurdum, böylece bunu $ resource'a iletmeliyiz.

Hiç kimse üzerinde herhangi bir ışık tutabilir mi? (herhangi bir çalışan örnek kodu büyük ölçüde takdir edilecektir).

DÜZENLEME: 13/08/13

bu soruyu ziyaret herkes farkındadır diye söylüyorum, cevapların hiçbiri aşağıda gerçekten kendimi soruyu, bir cevap araştırıyorum cevap ama gelmiş herkes bu noktalar ve bir cevap varsa Hala bunu takdir ediyorum.

DÜZENLEME: 06/09/13

Şu anda bu projeye bakarak, aradığım herşeyi izin görünüyor: Bu örnek işe yarayabilir https://github.com/jpillora/xdomain

+0

Bunun yerine bir hizmet kullanmayı denediniz mi? –

+1

Bana bir örnek verebilir misiniz lütfen Edgar? –

cevap

3

Tamam, Projem için buldum çözümü xdomain edilir Bu en iyi çözüm gibi görünüyor. (IE8 ve IE9'un kısmi destek sağladığının farkındayım, ancak IE ile her zaman olduğu gibi tam destek de değil ve IE için başka bir iş yapmak için zaman kaybetmek istemiyorum).

Soruya cevap veren herkese teşekkürler.

0

Eğer

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

teşekkürler, JSONP kullanmak istemiyorum, ne bir GET yerine bir DELETE veya PUT göndermek istiyorsanız? O zamandan beri biraz araştırma yaptım ve bence kodumda bir hata olabileceğini düşündüğümde, kısa süre sonra ona döneceğim ve düzeltip düzeltmeye çalışacağım. –

-1
için

Uygulamanızda useXDomain = true öğesini çağırıyor musunuz?yapılandırma(); Biz IE < 10 ile sıkışmış iken https://github.com/jpillora/xdomain

Ben bu herkes için uygun olmayabilir kabul ama iyi bir çapraz tarayıcı çözüm ve:

+0

Evet, CORS $ http ile çalışıyorum, bu yüzden yapılandırma doğru ayarlandı, ayrıca bir sunucuda bir elds kaynağını çevrimiçi bir örnekten (şimdi indirildi) kullanıyorum ve $ http değil, $ kaynak için çalıştı. Tbh, bence yukarıdaki düzenlemede eklediğim XDomain kaynağı ile gideceğim çözüm olacak. Daha fazla tarayıcıyla çalışıyor gibi görünüyor ve şu anda projemde test ediyorum; Daha fazlasını bildiğim zaman geri göndereceğim. Cevabınız için teşekkürler, yine de sorunun ölmediğine sevin! –

İlgili konular