gpt4 book ai didi

javascript - 在 for 循环 XMLHttpRequest 结束时执行回调

转载 作者:行者123 更新时间:2023-11-28 07:54:12 24 4
gpt4 key购买 nike

此代码循环遍历多个网页,查找每个页面上的链接,并将这些链接放入名为 linksArray 的数组中。我尝试在 for 循环处于最后一次迭代时(当 x =45 时)执行回调,并且 jQuery find().each 已完成对最后一页的所有链接的搜索.

由于某种原因,我没有从最后一页 ( http://fakeURL.com/45 ) 获得链接。看来回调函数是在 for 循环遍历完每个网页之前执行的。为什么会发生这种情况以及如何解决它?

function linkSearch(callback)
{

for(i = 0; i <= 45; i += 1)
{
ajaxCall(i);
}

var i;
var linksArray = [];
function ajaxCall (x)
{
var xhrs = new XMLHttpRequest();
xhrs.open("get", 'http://fakeURL.com/' + x, true);
xhrs.onload = function()
{
var doc = xhrs.response;
var len = $(doc).length; //will be used in telling when .each has gotten to the end of a page
$(doc).find("a[href^='http://linksFromEachPage.com/links']").each(function(index, element)
{
//below is how I'm trying to callback the linksArray when the for-loop is on its last iteration and .each has finished on the last page
thisVal = $(this).val();
if (x == 45)
{
if(parseInt(thisVal) != 0)
{
if (index == len - 1)
{
if($(doc).ajaxComplete)
{
callback(linksArray);
}
}
}
}
var url = $(this).attr('href');
linksArray[x] = url;
});
}
xhrs.responseType = 'document';
xhrs.send();
}

}

//and below is where the callback is called
linkSearch(function(theArray)
{
console.log(theArray);
});

最佳答案

由于您的问题是用 jQuery 标记的,因此这里是使用 jQuery 进行 ajax 调用的代码版本,并且 jQuery promise 跟踪它们何时完成。

function linkSearch(callback) {
var i, promises = [];
for (i = 0; i <= 45; i++) {
promises.push(
$.get({url:'http://fakeURL.com/' + i, dataType:'xml'})
);
}
$.when.apply($, promises).then(function() {
var linksArray = [];
// process all results here
for (i = 0; i < arguments.length; i++){
$(arguments[i][0])
.find("a[href^='http://linksFromEachPage.com/links']")
.each(function(index, element) {
var url = $(this).attr('href');
linksArray.push(url);
});
}
callback(linksArray);
});
}

关于javascript - 在 for 循环 XMLHttpRequest 结束时执行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com