我正在使用处理以逗号分隔的视频 ID 字符串的函数检索 Youtube 视频缩略图等:
function videoIDs(){
var videoArray = $("#comma-delimited-IDs").val().split(",");
var defArray = $.map(videoArray, function (videoIDs) {
var requestURLs = '//gdata.youtube.com/feeds/api/videos/'+ videoIDs +'?v=2&
format=5alt=json-in-script&callback=?';
return $.ajax({
type: "get",
dataType: "jsonp",
url: requestURLs,
success: function(data) {}
});
});
$.when.apply(null,defArray).done(function(){
$.each(arguments,function(i,arg){
var data = arg[0];
...
map 和 done 方法首先检索所有视频,按照它们基于逗号分隔的字符串出现的时间顺序,然后在页面上显示它们。如果不使用此方法,Youtube 将返回更快但随机顺序的视频缩略图。上述功能适用于 2 个或更多视频 ID,而不适用于单个视频 ID。我目前的问题是当 Youtube 服务器上不再存在视频时,包含缺少 ID 的逗号分隔 ID 字符串会引发故障,从而使该函数无法检索反映字符串中 ID 的任何现有视频。对此的解决方法将不胜感激。
注意:我希望能够检索已删除视频的缩略图(Youtube 的默认已删除视频缩略图),包括那些可用以保持原始视频缩略图总数不变(基于 ID 字符串)。谢谢样品/建议。
更新:
跨域问题似乎阻碍了本机 ajax/jsonp 进程的错误处理,但幸运的是,jQuery-jsonp 使用 1kb 插件缓解了这一问题(参见:https ://github.com/jaubourg/jquery-jsonp )。以下修改后的代码现在如下所示:
function videoIDs(){
var videoArray = $("#comma-delimited-IDs").val().split(",");
var defArray = $.map(videoArray, function (videoIDs) {
var requestURLs = '//gdata.youtube.com/feeds/api/videos/'+ videoIDs +'?v=2&
format=5alt=json-in-script&callback=?';
return $.jsonp({ // replace $.ajax({ with $.jsonp({
type: "get",
dataType: "jsonp",
url: requestURLs,
success: function(data) {},
error: function(d,msg) {
alert("Error. Video ID non existant.");
// add function here to skip missing ID and proceed to next ID in CSV string
}
});
});
$.when.apply(null,defArray).done(function(){
$.each(arguments,function(i,arg){
var data = arg[0];
... // code that displays Youtube thumbnails etc of available IDs.
因此,现在当视频 ID 不存在(已删除或私有)时会立即弹出警报,但是当发生这种情况时,处于其当前代码状态的函数会停止并且不会检索在 CSV 中找到现有 ID 的视频的任何缩略图细绳。有没有办法按以下顺序遍历 CSV 字符串中找到的所有 ID?:
- 请求CSV字符串中第一个ID的数据;
- 如果警报(或未找到),则忽略并转到 CSV 字符串中的第二个 ID,否则,返回第一个 ID 的数据(缩略图等),然后当完成时,转到 CSV 字符串中的第二个 ID;
- 在所有 CSV 字符串中按时间顺序重复上述过程,直到完成。
我对 ajax-jsonp 方法有点陌生,我的 jQuery 级别仍然是初学者。我希望有人可以提出一个可行的解决方案,谢谢帮助。