首页 > 解决方案 > 如何循环遍历 JQuery 而不会弄乱我的函数的运行顺序

问题描述

我正在构建一个网络爬虫来从一些网页中获取一些特定信息。我在表格上有页面的链接,我想创建一个循环,以便在每次迭代中我的函数都可以加载特定网站的 html 并检查短语是否位于该网站中。在该短语不存在的情况下,该表行将被删除。

我意识到,由于某种原因,当我运行循环时,应该抓取单个链接的 JQuery 函数等待循环结束,然后抓取同一页面 50 次,而不是每次抓取不同的网页。

    //snippet has been simplified to make the problem clear
    //assume urlList is a list of 50 different url's 

    function dataScraper(urlList){  
      for(i in urlList){
        $.get('https://allorigins.me/get?method=raw&url=' + encodeURIComponent(urlList[i]) + '&callback=?', function(data){
          localStorage.setItem("urlHTML"+String(i),data.contents)
          console.log(i) //for example this just prints 49, 50 times instead of printing all the separate values of i
          });
        }
       }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我知道 JQuery 正在等待整个加载,但是我如何确保 JQuery 函数接受每个人(i)而不是最大值(i)。

免责声明:我是一个自学成才的新手,最近学习了 JavaScript、HTML 和 JQuery。如果我遗漏了一些完全明显的东西,我深表歉意。

标签: javascriptjqueryhtml

解决方案


这是我根据提供的评论和更多研究对其进行修改的方式。

function dataScraper(urlList){
  var i = 0

  $.each(urlList,function(){
    $.get('https://allorigins.me/get?method=raw&url=' + encodeURIComponent(urlList[i]) + '&callback=?', function(data){
    localStorage.setItem("urlHTML"+String(i),data.contents)
    console.log(i)
    i++
        });
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


推荐阅读