在 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);
}
});
},
我有以下代码 在 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);
}
});
},