Angularjs Flickr API语法错误:使用nojsoncallback = 1时出现意外的令牌

时间:2016-02-28 12:57:43

标签: javascript angularjs json parsing flickr

我有一个angularjs应用程序来调用flickr api。

我希望RAW json格式的数据没有函数包装,而docs则应用&nojsoncallback=1

但是我收到以下控制台错误。 SyntaxError: Unexpected token '

仅在将&nojsoncallback=1应用于网址时才会显示此错误。但是我希望RAW json没有包装。

如果我不将上述内容应用到网址并简单使用https://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=json,我就不会收到任何错误,但是当控制台退出我的类型时,我会收到字符串'显示。

然后我尝试将其解析为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));

        });
    }]);

})();

1 个答案:

答案 0 :(得分:0)

生成角度资源以使用格式{'json', jsoncallback: 'JSON_CALLBACK'}调用api。在此处查看完整解决方案 - 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();
});