我在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来更新更改)
答案 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);
}
});
},