Angularjs Flickr API SyntaxError: Unexpected token when using nojsoncallback=1
Angularjs Flickr API SyntaxError: Unexpected token when using nojsoncallback=1
我有一个 angularjs 应用程序可以调用 flickr api。
我想要 RAW json 格式的数据,没有函数包装器,并且根据 docs,应用 &nojsoncallback=1
。
但是我收到以下控制台错误。 SyntaxError: Unexpected token '
此错误仅在将 &nojsoncallback=1
应用于 url 时出现。但是我想要没有包装的 RAW json。
如果我不将以上内容应用于 url 并简单地使用 https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json
,我不会收到任何错误,但是当控制台注销 typeof 时,我会显示 'string'。
然后我尝试将其解析为 JSON 并得到另一个错误,因为它有一个包装。因此,为什么我想要 RAW。
下面是我目前的代码。任何帮助 - 非常感谢。
JS
(function(){
'use strict';
var app = angular.module('flickrApp', []);
app.controller('FlickrFeedController', ['$http', '$scope', function($http, $scope){
// grab the flickr api
var response = $http.get('http://crossorigin.me/https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json&nojsoncallback=1');
// on success
response.success(function(data){
// console logging out the typeof gives 'string'
console.log(typeof(data));
// since it's a string I would then want to convert it into a json object
// but I need to sort the current error out first
// data = JSON.parse(data);
// console.log(typeof(data));
});
}]);
})();
编辑:
这是一项从 url 中移除 &nojsoncallback=1
的工作(移除控制台错误),因为数据以字符串形式返回,必须替换字符,然后进行解析。不太好,但我得到了所需的输出(对象),我想我会把它添加到这里供其他人查看。
JS
(function(){
'use strict';
var app = angular.module('flickrApp', []);
app.controller('FlickrFeedController', ['$http', '$scope', function($http, $scope){
// grab the flickr api
var response = $http.get('http://crossorigin.me/https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json');
// on success
response.success(function(data){
// typeOf is 'string' even though format=json is specified in the url
//console.log(typeof(data));
//console.log(data);
// work-around since data is returned as a string
data = data.replace('jsonFlickrFeed(', '');
data = data.replace('})', '}');
data = data.replace(/\'/g, "'");
// parse the data
data = JSON.parse(data);
// typeOf is 'object'
console.log(data.items);
console.log(typeof(data));
});
}]);
})();
生成 angular 资源以调用 api,格式为:{'json', jsoncallback: 'JSON_CALLBACK'}
。在此处查看完整的解决方案 - http://plnkr.co/edit/Lxxkb9?p=preview
var app = angular.module('flickrApp', ['ngResource']);
app.factory('Flickr', function($resource, $q) {
var photosPublic = $resource('http://crossorigin.me/https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json',
{ format: 'json', jsoncallback: 'JSON_CALLBACK' },
{ 'load': { 'method': 'JSONP' } });
return {
get: function() {
var q = $q.defer();
photosPublic.load(function(resp) {
q.resolve(resp);
console.log(resp.items);
})
return q.promise;
}
}
});
app.controller('FlickrCtrl', function($scope, Flickr) {
Flickr.get();
});
我有一个 angularjs 应用程序可以调用 flickr api。
我想要 RAW json 格式的数据,没有函数包装器,并且根据 docs,应用 &nojsoncallback=1
。
但是我收到以下控制台错误。 SyntaxError: Unexpected token '
此错误仅在将 &nojsoncallback=1
应用于 url 时出现。但是我想要没有包装的 RAW json。
如果我不将以上内容应用于 url 并简单地使用 https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json
,我不会收到任何错误,但是当控制台注销 typeof 时,我会显示 'string'。
然后我尝试将其解析为 JSON 并得到另一个错误,因为它有一个包装。因此,为什么我想要 RAW。
下面是我目前的代码。任何帮助 - 非常感谢。
JS
(function(){
'use strict';
var app = angular.module('flickrApp', []);
app.controller('FlickrFeedController', ['$http', '$scope', function($http, $scope){
// grab the flickr api
var response = $http.get('http://crossorigin.me/https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json&nojsoncallback=1');
// on success
response.success(function(data){
// console logging out the typeof gives 'string'
console.log(typeof(data));
// since it's a string I would then want to convert it into a json object
// but I need to sort the current error out first
// data = JSON.parse(data);
// console.log(typeof(data));
});
}]);
})();
编辑:
这是一项从 url 中移除 &nojsoncallback=1
的工作(移除控制台错误),因为数据以字符串形式返回,必须替换字符,然后进行解析。不太好,但我得到了所需的输出(对象),我想我会把它添加到这里供其他人查看。
JS
(function(){
'use strict';
var app = angular.module('flickrApp', []);
app.controller('FlickrFeedController', ['$http', '$scope', function($http, $scope){
// grab the flickr api
var response = $http.get('http://crossorigin.me/https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json');
// on success
response.success(function(data){
// typeOf is 'string' even though format=json is specified in the url
//console.log(typeof(data));
//console.log(data);
// work-around since data is returned as a string
data = data.replace('jsonFlickrFeed(', '');
data = data.replace('})', '}');
data = data.replace(/\'/g, "'");
// parse the data
data = JSON.parse(data);
// typeOf is 'object'
console.log(data.items);
console.log(typeof(data));
});
}]);
})();
生成 angular 资源以调用 api,格式为:{'json', jsoncallback: 'JSON_CALLBACK'}
。在此处查看完整的解决方案 - http://plnkr.co/edit/Lxxkb9?p=preview
var app = angular.module('flickrApp', ['ngResource']);
app.factory('Flickr', function($resource, $q) {
var photosPublic = $resource('http://crossorigin.me/https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json',
{ format: 'json', jsoncallback: 'JSON_CALLBACK' },
{ 'load': { 'method': 'JSONP' } });
return {
get: function() {
var q = $q.defer();
photosPublic.load(function(resp) {
q.resolve(resp);
console.log(resp.items);
})
return q.promise;
}
}
});
app.controller('FlickrCtrl', function($scope, Flickr) {
Flickr.get();
});