上次完成后,一次加载一个链接列表

时间:2012-02-11 17:38:47

标签: javascript jquery

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),并且一旦该目标准备就绪,再次运行该函数。点击似乎甚至不会加载第一个目标,更不用说迭代了(我原本预计它会重定向第一次点击,直到我找到代理内容......)

3 个答案:

答案 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()不是您认为的那样。 你不得不重新考虑我害怕的这一切。