如何通过一组url并解析它?

时间:2018-03-30 05:23:34

标签: javascript jquery

我有一个URL数组,我想去每个页面来解析一些信息。我这样做:

var numbers = ["1111", "2222", "3333"];

function parse(page){...
}

function set(page){
console.log(page);
window.location = page;
parse (page);
}

for (j=0,m = numbers.length; j<m; j++){
page="http://www.*****/*****/"+numbers[j]+"/*****/"; 
setInterval(set(page), 10000);
}

但它不起作用,因为浏览器试图下载页面,最后只会显示最后一页。函数“parse”不解析页面。如何修复我的代码?

4 个答案:

答案 0 :(得分:0)

setInterval将按照您调用它的方式每10秒调用一次set函数。 for循环将在该时间结束before,此时page的值将为:

"http://www.*****/*****/3333/*****/"; 

因此,10秒后您将只看到显示的页面。

答案 1 :(得分:0)

尝试使用setTimeout与递归调用结合使用。

const MAX=100;
setPage(num){
parse()
if(num<MAX)
  setTimeout(setPage(num+1), 10000);
}

答案 2 :(得分:0)

这是由JS中的Scopes和Closures引起的。该问题的解决方案是在循环内创建IIFE(立即调用函数表达式)!

&#13;
&#13;
for (var i=1; i<=5; i++) {
  page="http://www.*****/*****/"+numbers[j]+"/*****/"; 
    (function(j){
        setTimeout( set(page), 10000 );
    })( i );
}
&#13;
&#13;
&#13;

如果您有时间,请参阅JS中的闭包!

答案 3 :(得分:0)

当您使用Planet时,您只需告诉浏览器在10秒后执行{ "Microsoft.Resources":{ "resourceUri":"/subscriptions/123subscription123/resourceGroups/123resourcegroup123/providers/Microsoft.Storage/storageAccounts/123storagaccount123", "location":"euwest" } } 功能,并且因为所有SELECT JSON_VALUE(I.value, '$.resourceUri') as resourceUri , JSON_VALUE(C.value, '$.Location') as Location FROM OPENJSON(InstanceData, N'lax $.Microsoft.Resources') I CROSS APPLY OPENJSON(I.value, N'lax $.fields.resourceUri') C 都在很短的时间内被调用对于循环,他们也将同时执行任务,然后设置将执行三次,首先是setInterval()然后是set()setInterval()。 它似乎只用"1111"运行最后一个。

我建议您只使用"2222"一次,而使用计数器创建"3333"变量。

"3333"