Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao realizar $http.jsonp angularjs

Boa Tarde Galera,

To tentando ler um rss, contudo, quando faço a chamada do método $http.jsonp sempre me retorna o seguinte erro: Error: [$sce:insecurl] http://errors.angularjs.org/1.6.1/$sce/insecurl?

Já dei uma olhada na documentação do angular, mas como sou bem iniciante não compreendi onde poderia estar meu erro.

Segue o código que estou fazendo:

angular.module('podcasts').controller('podcastsController', function($scope,$http){
   var urlBase = '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&callback=JSON_CALLBACK&q=';
   var urlDev = 'http://devnaestrada.com.br/feed.xml';
   var url = urlBase + encodeURIComponent(urlDev);
   $http.jsonp(url).then(function(response){
       console.log('OK');
       $scope.valor = response;
   })
   .catch(function(response){
       console.log('Erro');
       $scope.valor = response;
   });

});

Agradeço a ajuda de quem puder....

2 respostas
solução!

Olá Diego,

Isso acontece por causa de uma politica de segurança adicionada no Angular 1.2. -> https://docs.angularjs.org/error/$sce/insecurl . O Angular não 'confia' na fonte onde está buscando o recurso.

Uma possibilidade seria usar uma white list em um modulo para que ele reconheça as urls de onde você carrega seus recursos. Algo como:

angular.module('myApp', []).config(function($sceDelegateProvider) {
    $sceDelegateProvider.resourceUrlWhitelist([
    // Permite carregar recursos da mesmo fonte -> seu host
    'self',
    // Permite carregar de outros dominios registrados
    'http://blabla.example.com/bla'
  ]);

Ou usar a função trustAsResourceUrl do $sce, no seu controller:

angular.module('podcasts').controller('podcastsController', function($scope,$http, $sce) {
    $scope.trustSrc = function(src) {
        return $sce.trustAsResourceUrl(src);
    };
});

... e então ...

ng-src="{{trustSrc('http://blabla.example.com/bla')}}"

Espero ter ajudado. Abraço!

Rafael foi no ponto!