如何从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,但未能获得相同的结果(并且不能包含其发布日期和质量的有用参数;因为它已被破坏)。
答案 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')
请注意差异:
jsonp
代替get
alt=json-in-script
代替alt=json
(请注意,根据API文档,这可能会有所不同)callback=JSON_CALLBACK
(请注意,根据API文档,这可能会有所不同,但AngularJS会在回复中寻找JSON_CALLBACK
。Check out this fiddle查看工作版本(根据原始代码与this fiddle进行比较)。
另请查看this wiki文章,了解有关JSONP的更多信息。