【发布时间】:2016-09-04 13:16:02
【问题描述】:
我不确定这是否真的可行,因为 load() 是一种异步方法,但我需要一些方法来基本上加载几个页面,一次一个,通过以下方式获取其中包含的一些数据JavaScript,然后通过 Ajax 发送,这样我就可以把它放到我创建的数据库中。
基本上我是从我的页面中获得的,我必须遍历的所有链接都位于该页面:
var digiList = $('.2u');
var link;
for(var i=0;i<digiList.length;i++){
link = "http://www.digimon-heroes.com" + $(digiList).eq(i).find('map').children().attr('href');
到目前为止一切顺利。
现在,我将不得不将每个链接(仅整个页面的特定 div,而不是整个内容)加载到页面周围某处的 div 中,以便我可以通过 JQuery 获取一些数据:
var contentURI= link + ' div.row:nth-child(2)';
$('#single').load('grabber.php?url='+ contentURI,function(){
///////////// And I do a bunch of JQuery stuff here, and save stuff into an object
///////////// Aaaand then I call up an ajax request.
$.ajax({
url: 'insertDigi.php',
type: 'POST',
data: {digimon: JSON.stringify(digimon)},
dataType: 'json',
success: function(msg){
console.log(msg);
}
////////This calls up a script that handles everything and makes an insert into my database.
}); //END ajax
}); //END load callback Function
} //END 'for' Statement.
alert('Inserted!');
当然,正如预期的那样,加载花费的时间太长,for 语句的其余部分只是继续执行,并不真正关心让加载完成它的业务,因为加载是异步的。 alert('Inserted!'); 在我有机会加载第一页之前就被调用了。反过来,这意味着在我什至可以处理它的信息并将其发送到我的脚本之前,我只能将这些东西加载到我的 div 中。
所以我的问题是:是否有一些创造性的方法可以让我可以遍历多个链接、加载它们、与它们开展业务并完成它?如果没有,是否有同步替代加载,可以产生大致相同的效果?我知道它可能会完全阻塞我的页面,但我可以接受,因为该页面不需要我的任何输入。
希望我用必要的细节解释了一切,希望你们能帮助我解决这个问题。谢谢!
【问题讨论】:
-
没有。您忘记提供 HTML。
-
在这种情况下,我认为这不会为我的特定问题提供背景信息。我已经单独测试了我的脚本上的所有内容,并且一切正常。我可以获取数据并将其输入我的数据库。我的问题不在于页面本身,而只是让“for”语句等待我的 .load() 回调函数结束,然后继续并增加它的 Iterator 变量。
-
您真的希望它们一个接一个地运行吗?或者他们可以一起异步运行吗?
-
我想你正在寻找这样的东西? stackoverflow.com/a/21819961/1385672
-
他们绝对可以同时运行所有我关心的。我的问题是它们需要先加载到我的页面中,以便我可以通过 Javascript 访问我需要的数据。这有点限制我一次只做一个(加载页面-> 获取数据-> 发送数据- > 加载另一个页面 -> 获取数据 -> 发送数据 -> ...),我想?如果有替代方案,那么我会全力以赴。
标签: javascript jquery ajax for-loop load