Javascript延迟函数,但让循环等待它
我知道这不是一个好主意,但每个程序员都想了解更多。 现在我一直在尝试网络抓取。第一次创建脚本并运行它会阻止我的ip地址。我错了,因为在我的脚本中,我向网站发送了太多的请求,这样会导致网站流量增加,让他们认为我是入侵者, 我想出这个主意来延迟我的请求,我如何使我的循环等待函数完成? 我不想用这种东西。这将每5秒执行一次Javascript延迟函数,但让循环等待它,javascript,ajax,Javascript,Ajax,我知道这不是一个好主意,但每个程序员都想了解更多。 现在我一直在尝试网络抓取。第一次创建脚本并运行它会阻止我的ip地址。我错了,因为在我的脚本中,我向网站发送了太多的请求,这样会导致网站流量增加,让他们认为我是入侵者, 我想出这个主意来延迟我的请求,我如何使我的循环等待函数完成? 我不想用这种东西。这将每5秒执行一次 (function(links){ setTimeout(function() { scrapeAnotherLink(links); }, delay); })(re
(function(links){
setTimeout(function() { scrapeAnotherLink(links); }, delay);
})(result[val]);
delay += 5000;
我想等待ajax请求完成从提供的链接中删除,然后等待5秒钟,然后再次执行
我的密码
刮链接//只是一个样本
$('#scrape').click(function() {
$.ajax({
type: 'get',
url: 'scrape.php',
data:{Param:1},
dataType: 'json',
cache: false,
success: function(result) {
for(var val in result) {
link = result[val];
scrapeAnotherLink(link);
}
},
});
});
function scrapeAnotherLink(link){
//Some ajax here
setTimeout(function() {
output_log(link);
}, 5000);
}
function output_log(str){
$('#output').append(str+'<br/>');
}
$('scrape')。单击(函数(){
$.ajax({
键入:“get”,
url:'scrape.php',
数据:{Param:1},
数据类型:“json”,
cache:false,
成功:函数(结果){
对于(结果中的var val){
链接=结果[val];
另一个链接(link);
}
},
});
});
功能刮除另一个链接(链接){
//这里有些ajax
setTimeout(函数(){
输出日志(链接);
}, 5000);
}
函数输出日志(str){
$('#output').append(str+'
');
}
我读到一些报废者共用ip地址,但我不知道像这样的东西怎么做。不要使用循环,而是在上一个ajax请求结束时执行递归调用。下面的代码有一些假设,但它传达了这个想法
function executeAjax() {
$.ajax({
type: 'get',
url: 'scrape.php',
data:{Param:1},
dataType: 'json',
cache: false,
success: function(links) {
scrapeAnotherLink(links, 0);
}
});
}
function scrapeAnotherLink(links, index){
//Some ajax here
function executeCall(){
$.ajax({
url : links[index],
success : function(str) {
output_log(str);
scrapeAnotherLink(links, ++index);
}
});
}
setTimeout(executeCall, 5000);
}
function output_log(str){
$('#output').append(str+'<br/>');
}
函数executeAjax(){
$.ajax({
键入:“get”,
url:'scrape.php',
数据:{Param:1},
数据类型:“json”,
cache:false,
成功:功能(链接){
另一个链接(链接,0);
}
});
}
函数的另一个链接(链接、索引){
//这里有些ajax
函数executeCall(){
$.ajax({
url:链接[索引],
成功:功能(str){
输出日志(str);
另一个链接(链接,++索引);
}
});
}
设置超时(executeCall,5000);
}
函数输出日志(str){
$('#output').append(str+'
');
}
您忘记停止递归调用true。它只是一个if(index>=links.length)返回代码>。希望这有帮助