我不知道这是否会实际上是不可能的,因为负载()是一个异步方法,但我需要一些方法来基本加载的页面数小块,一次一个,获得通过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语句其余的只是不断经历,没有真正关心让负载完成了它的业务,由于负载是异步的。 警报( '插入!'); 之前,我甚至去加载第一页的机会被调用。 这反过来又意味着,我只得到了东西加载到我的div之前,我甚至可以把它的信息,并将其发送到我的脚本。
所以我的问题是:有没有在这样,我可以通过多条链路迭代,加载它们的方式做到这一点一些有创意的方式,做我的事与他们,并用它做什么? 如果没有,是否有一个同步的替代加载,这可能会产生大致相同的效果呢? 我知道,它可能会完全阻止了我的网页,但我会与它的罚款,因为该页面不从我不需要任何输入。
希望我解释了一切必要的细节,希望你们能帮助我了这一点。 谢谢!
你可能需要一个递归函数,即等待一个迭代,才去到下一个迭代等。
(function recursive(i) {
var digiList = $('.2u');
var link = digiList.eq(i).find('map').children().attr('href') + ' div.row:nth-child(2)';
$.ajax({
url: 'grabber.php',
data: {
url: link
}
}).done(function(data) {
// do stuff with "data"
$.ajax({
url: 'insertDigi.php',
type: 'POST',
data: {
digimon: digimon
},
dataType: 'json'
}).done(function(msg) {
console.log(msg);
if (i < digiList.length) {
recursive(++i); // do the next one ... when this is one is done
}
});
});
})(0);
万一你希望他们一起运行,您可以使用封闭保存在每个循环数
for (var i = 0; i < digiList.length; i++) {
(function(num) { < // num here as the argument is actually i
var link = "http://www.digimon-heroes.com" + $(digiList).eq(num).find('map').children().attr('href');
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
})(i);// <-- pass in the number from the loop
}
您可以随时使用同步AJAX,但没有很好的理由。
如果你知道你需要下载文件的数量(你可以指望他们或只是硬编码,如果是常数),你可以运行成功的一些回调函数,如果一切都做,然后用需要的所有文件的逻辑进行。
为了使其更好,你可以只触发一个事件(在文档或任何其他对象)时,一切都被下载(例如“downloads_done”),并听取关于这甚至让你需要做什么。
但是,所有上述是你需要的时候都做是为了做一些事情的情况。 但是我不知道如果我理解正确你的问题(只是再次阅读本)。
如果你要下载的东西 - >做数据的东西 - >下载另一件事 - >再做些什么?
那么你也可以使用JavaScript瀑布(库或建立你自己的),使之简单,使用方便。 在瀑布定义时异步功能完成后,一个接一个会发生什么。