在Angular

时间:2015-08-22 10:01:38

标签: angularjs angular-http

我在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);
    }
  });
},

作为"更好"方式通常是使用$ 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'标头出现在请求的资源上"

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

1 个答案:

答案 0 :(得分:0)

通过在getJSON-Version中添加参数“callback: JSON_CALLBACK”来解决这个问题。

所以完整的请求看起来像这样:

  $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);
                        }
                    });
            },