从AngularJS中的JSON resp解析$?

时间:2013-07-07 18:56:41

标签: javascript json angularjs youtube-api angularjs-service

如何从AngularJS中的JSON HTTP响应中解析$

尝试在没有JQuery的情况下抓取YouTube搜索结果:

$http.get('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published')
    .success(function (data) {
         $scope.video_list = data;
    })
    .error(function (data) {
         $scope.video_list = data;
});

没有错误响应,在安慰时得到一个Object;但不能在其中查询。

$scope.video_list_fun = function () {
    $http.get('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published').then(function (response) {
          $scope.video_list = response.data;
    });
};

同样在这里,尝试使用,链式else

$scope.video_list = (httpGet('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published'
                     )); // HttpGet from http://stackoverflow.com/a/4033310/587021

这是有效的,但是当我解析它时,例如:JSON.parse; AngularJS删除了$中的所有键。


应该注意我已尝试使用their other API,但未能获得相同的结果(并且不能包含其发布日期和质量的有用参数;因为它已被破坏)。

1 个答案:

答案 0 :(得分:2)

它看起来像是跨域限制。看看使用$http.jsonp是否适合您。

查看YouTube文档中的"Using the Data API with JavaScript",其中说明您需要使用alt=json-in-script以及callback参数。

所以不要访问:

$http.get('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published')

您将访问:

 $http.jsonp('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json-in-script&orderby=published&callback=JSON_CALLBACK')

请注意差异:

  1. 使用jsonp代替get
  2. 使用alt=json-in-script代替alt=json(请注意,根据API文档,这可能会有所不同)
  3. 添加callback=JSON_CALLBACK(请注意,根据API文档,这可能会有所不同,但AngularJS会在回复中寻找JSON_CALLBACK
  4. Check out this fiddle查看工作版本(根据原始代码与this fiddle进行比较)。

    另请查看this wiki文章,了解有关JSONP的更多信息。