与Show a list of links in an iframe one at a time with jquery类似但没有setTimeout函数 - 因为我希望在前一个文档完成加载后启动下一次获取。
我是javascript的菜鸟,jquery更是如此,但这是我的第一次拍摄:
links = ["http://example1.com","http://example2.com","http://example3.com"]
function loadNext(x){
if ( x < links.length ){
$('#target').load('links[x]');
$('#target').ready(function(){
x++;
loadNext(x);
});
};
};
$(document).ready(function(){
$('.loader').click(function(){
loadNext(0);
});
});
</script>
<div id="bd" role="main">
<ul>
<li><a href="#" class="loader">Start loading</a></li>
</ul>
<div id="target"></div>
</div>
我真的不明白为什么这不起作用。逻辑似乎至少是正确的。单击以触发传入索引0的函数,然后在id =“target”中加载该数组值(完整URL),并且一旦该目标准备就绪,再次运行该函数。点击似乎甚至不会加载第一个目标,更不用说迭代了(我原本预计它会重定向第一次点击,直到我找到代理内容......)
答案 0 :(得分:2)
假设您在代码中的某处定义了links
。尝试使用loadNext
方法的回调功能在前一次加载完成后调用load
。
function loadNext(x){
if ( x < links.length ){
$('#target').load(links[x], function(){
loadNext(x++);
});
}
}
使用上面的代码,每个加载都会覆盖#target
中的先前内容。如果你想保留它,那就使用它。
function loadNext(x){
if ( x < links.length ){
$('#target').append($('<div />').load(links[x], function(){
loadNext(x++);
})
);
}
}
<强>更新强>
如果您尝试使用load
访问外部网址,则由于跨域访问限制,它无法正常工作。但是有一些方法可以使用JSONP,YQL等从外部站点获取内容。
看一下这个链接 http://icant.co.uk/articles/crossdomain-ajax-with-jquery/using-yql.html
答案 1 :(得分:1)
以下改进应该有所帮助:
$('#target').append($("<div>").load(links[x], function() {
loadNext(x+1);
});
load()
接受回调函数作为参数,您应该使用'links[x]'
被视为网址,因此请删除单引号(假设存在links
)load()
会覆盖#target
的内容,因此请与append()
答案 2 :(得分:0)
嗯,你的脚本只是无效的代码。如果x
应该是一个数组if ( x < links.length )
是错误的。 load('links[x]')
不正确。 links
未声明。您在函数中调用了相同的函数,并且您有许多意外的;
。并且ready()
不是您认为的那样。
你不得不重新考虑我害怕的这一切。