javascript - 如何循环遍历 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。如果我遗漏了一些完全明显的东西,我深表歉意。
解决方案
这是我根据提供的评论和更多研究对其进行修改的方式。
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>
推荐阅读
- c++ - logb() 和 ilogb() 有什么区别?
- javascript - 如何检查文件下载是否在 Chrome 中完成?
- javascript - 如何调用嵌套在表格单元格中的textarea属性?
- mysql - Map.prototype.forEach 不迭代 Map
- parsing - 如何使用 Graph-API、3rd-party API 或解析读出喜欢或评论我的帖子的 instagram 帐户名称 (2019)?
- openedx - 如何在 open edx 中解决此证书的问题
- java - 在 Java 8 Stream API 中使用条件修改数组列表
- oracle - 将 MERGE 与 Oracle 存储过程一起使用
- java - 创建一个计划任务,该任务将在特定时间后处理
- visual-studio-code - 禁用警告格式更漂亮