Angular $ http与bbc radio api

时间:2015-03-31 08:22:57

标签: json angularjs cors

我需要从bbc收音机获取这个json: http://www.bbc.co.uk/radio1/playlist.json

我可以从POSTMAN获得它,但后来我尝试从我的角度应用程序中获取它,我发现了错误。

XMLHttpRequest cannot load http://www.bbc.co.uk/radio1/playlist.json. No 'Access-Control-Allow-Origin' header is present on the requested resource

是的,我在Stack Overflow上看到了很多类似的猜测,但我认为这不是一个需要解决的服务器任务。

在我的角度代码中,我得到了这个:

async: function (radio) {
                return $http({
                    method: 'GET', //or JSON
                    url: api.url + radio + '/playlist.json',
                    headers: {
                        'Content-Type': 'application/json',
                        'Accept': 'application/json',
                        'Access-Control-Allow-Origin': '*'
                    }
                })
                    .success(function (d) {
                        console.log('done');
                    })
                    .error(function (d) {
                        console.log('nope');
                    });
            }

这在配置中:

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

但是CORS无论如何都不起作用。

1 个答案:

答案 0 :(得分:2)

显然这个播放列表和BBC api不支持jsonp并且没有CORS设置所以我能从头脑中思考的解决方案就是使用CURL

http://plnkr.co/edit/66yErNbEkONrcC8LjqUV?p=preview

$http.jsonp('http://edeen.pl/curl.php?callback=JSON_CALLBACK').then(function(response){
    $scope.playlist = response.data
    console.log(response.data)
  })

curl.php

<?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, "http://www.bbc.co.uk/radio1/playlist.json");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($ch);
  curl_close($ch);

  echo $_GET['callback'].'('.$output.')';