为每个youtube视频ID单独获取请求
separate get requests for each youtube video ID
我试图通过每个id从数组持有youtube id到get请求。目标是获取每个视频id的名称并创建一个新数组。
首先,这就是我正在做的。我得到一个空数组
var x = ['CSvFpBOe8eY', 'Zi_XLOBDo_Y'];
var x_title = [];
for (var i = 0; i < x.length; i++) {
$.getJSON('http://gdata.youtube.com/feeds/api/videos/' + x[i] + '?v=2&alt=jsonc', function (data, status, xhr) {
x_title[i]= data.data.title;
});
}
console.log(x_title)
小提琴来了
http://jsfiddle.net/sghoush1/Cnepk/5/数组是空的,因为它在所有getJSON调用完成之前被打印出来。但是,你还有另一个问题。
i
没有为每个循环限定作用域,因此您最终将使用请求完成时i
的最后一个值。
你需要用IIFE(立即调用的函数执行)包装内部循环,并将i
传递给它,或者使用数组的forEach
api。
IIFE使用示例http://jsfiddle.net/jj7Pg/
for (var i = 0; i < x.length; i++) {
(function(_i){
$.getJSON('http://gdata.youtube.com/feeds/api/videos/' + x[_i] + '?v=2&alt=jsonc', function (data, status, xhr) {
x_title[_i]= data.data.title;
console.log(x_title);
});
}(i));
}
forEach
示例http://jsfiddle.net/jj7Pg/1/
x.forEach(function(item, indx){
$.getJSON('http://gdata.youtube.com/feeds/api/videos/' + item + '?v=2&alt=jsonc', function (data, status, xhr) {
x_title[indx]= data.data.title;
console.log(x_title);
});
});
如果你正在使用较新的浏览器,我会使用forEach
方法。兼容性列表可以在这里找到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Browser_compatibility
这实际上工作得很好,但你得到一个空数组,因为你的getJSON
调用是异步的,你的console.log
在它返回数据之前触发。
示例,注意工作是在success回调函数中完成的。
相关文章:
- 当两个单独的单词被放在目标上时,使用Jquery获取一个值
- 如何在日期选择器中的单独变量中获取日期月份和日期
- 从引导范围滑块中获取单独的值
- 从GeoJson文件中获取单独的Lat和Lng值
- 如何在较小尺寸的屏幕中间以单独的 html 形式获取 php 文件的输出
- 获取动态背景颜色,使用 LESS 应用于单独的元素
- 如何从<窗体>中获取数据并在单独的
- jQuery - 从数组中获取的效果元素(单独)
- 如何从开始日期中的单独字段添加天数/周,以在日期选择器中获取结束日期
- 如何在创建动态输入文件时获取相同输入类型的单独 ID
- 使用余烬数据如何单独异步获取子项
- 使用 Javascript 从单独的 PHP 文件中获取变量
- 如何仅从 DOM 窗口对象中获取属性?(不单独指定)
- 将数据从单独的 JavaScript 文件获取到数组中
- 获取单独的 html 标记中的值
- 从单独的PHP文件中获取数组并存储到jQuery数组中
- 在单独的Javascript文件中获取模型值
- 如何在使用flot绘制图形时单独获取数据值
- 如何解析电子邮件签名以单独获取详细信息
- 为每个youtube视频ID单独获取请求