0

如何$从 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;
});

那个没有错误响应,安慰它的时候得到一个对象;但不能在其中查询。

$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

这可行,但是当我解析它时,例如: with JSON.parse; AngularJS 摆脱了其中的所有键$


应该注意,我已经尝试过使用他们的其他 API,但无法获得相同的结果(并且不能包含他们对发布日期和质量有用的参数;因为它已损坏)。

4

1 回答 1

2

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

查看 YouTube 文档中的“将数据 API 与 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响应中寻找。

查看此小提琴以查看工作版本(与基于原始代码的此小提琴进行比较)。

另请查看此 wiki文章以获取有关 JSONP 的更多信息。

于 2013-07-07T19:34:08.083 回答