在 Angular 中模仿 getJSON

mimicking getJSON in Angular

我有以下代码 在 Angular 中工作 :

$scope.yqlProxy=function(url, done) {
  $.getJSON("http://query.yahooapis.com/v1/public/yql",
  {
    q:      'select * from json where url="'+url+'"',
    format: "json"
  },
  function(data){
    if (data.query.results) {
        done(data.query.results);
    }
  });
},

由于 "better" 方式通常是使用 $http 我将代码更改为:

$scope.yqlProxy=function(url, done) {
  $http.get("http://query.yahooapis.com/v1/public/yql",
  {
    params: {
      q: 'select * from json where url="' + url + '"',
      format: "json"
    }
  })
  .success(function(data){
    if (data.query.results) {
      done(data.query.results);
    }
  });
}

现在我收到错误“No 'Access-Control-Allow-Origin” header 存在于所请求的资源上

但是为了解决这个错误,我首先使用了 yahoo-proxy。它允许我访问没有 header 的 url。使用 getJSON 一切都很好(没有错误,内容正确),但是使用 $http 我收到该错误。甚至有办法使这项工作正常进行,还是我必须坚持使用 .getJSON(并使用 $scope.apply 来更新更改)

通过添加参数“callback: JSON_CALLBACK”解决了这个问题,这在 getJSON-Version 中是不必要的。

因此完整的请求如下所示:

  $scope.yqlProxy=function(url, done) {
                $http.jsonp("http://query.yahooapis.com/v1/public/yql",
                    {
                        params: {
                            q: 'select * from json where url="' + url + '"',
                            format: "json",
                            callback: "JSON_CALLBACK"
                        }
                    })
                    .success(function(data){
                        if (data.query.results) {
                            done(data.query.results);
                        }
                    });
            },