我正在通过为网站编写Chrome扩展来学习JavaScript。该网站有一个显示4个视频列表的部分,并带有一个按钮来加载更多视频。当你点击这个按钮时,它会通过AJAX调用加载一个新的视频列表。函数(从setTimeout调用)不返回值
我有一个函数getNextVideo()
,它获取列表中下一个视频的URL。例如,如果您使用的是第三个视频,则会抓取第四个视频的网址。如果您使用的是第四个视频,则会通过功能getNextVideoList()
模拟点击(加载新视频列表),然后在1秒超时后抓取新加载列表中的第一个,以等待DOM更新(我尝试使用突变观察者,但对我的技能水平来说太复杂了)。
function getNextVideo()
{
if (getVideoPosition() == 4)
{
function ad()
{
getVideo(1);
}
setTimeout(ad, 1000);
getNextVideoList();
}
else
{
var index = getVideoPosition() + 1;
return getVideo(index);
}
}
getVideoPosition()
获取列表中的视频使用一些简单的jQuery第n个孩子选择的指数。它返回值1
,2
,3
或4
。
getVideo(n)
获取视频的索引(1,2,3或4)并返回该视频的URL。返回值看起来像这样在控制台:"http://video.example.com/video-id"
我的问题是,当我的影片,是4日在队列中跑getNextVideo()
,我得到undefined
在我的控制台返回。在AJAX调用和后续DOM更新之后,如何使getNextVideo()
函数返回列表中第一个视频的URL?
我可以看到你的Ajax调用吗?您可能需要将您的回调包装在代理功能中 – Paul
看起来您有一个错误。你确定你用来迭代的索引在范围内吗?特别是在getVideoPosition()和getVideo(n)中? – Hrishi
阅读[是否有可能从'setTimeout'返回一个值?](http://stackoverflow.com/questions/13730709/is-it-possible-to-return-a-value-from-settimeout-without-a -callback-function?rq = 1)和[如何从AJAX调用中返回值?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax -call?rq = 1) – DCoder