这段代码应该循环遍历几个网页并找到每个页面上的所有链接,并在控制台中列出它们,但它似乎只列出最后一个网页(fakeURL.com/735)的链接。
如何让 console.log(url);
为每次迭代工作,而不仅仅是最后一次迭代(即 i=735 时)?
for(i = 0; i <= 735; i += 15)
{
var xhrs = new XMLHttpRequest();
xhrs.open("get", 'http://fakeURL.com/' + i, true);
xhrs.onreadystatechange = function()
{
if (xhrs.readyState == 4)
{
$(xhrs.responseText).find('a').each(function()
{
var url = $(this).attr('href');
console.log(url);
});
}
}
xhrs.send();
}
最佳答案
您的问题是您为所有 ajax 调用重复使用相同的 xhrs
变量。因此,当 onreadystatechange
事件触发时,所有正在执行的调用都无法找到属于其特定请求的 xhrs
变量。因此,它们最终都会查看最后一个请求中的 xhrs.readyState
,因此您只能看到最后一个请求已完成。
您应该能够切换到使用 this
来引用生成 onreadystatechange
事件的请求:
for(i = 0; i <= 735; i += 15) {
var xhrs = new XMLHttpRequest();
xhrs.open("get", 'http://fakeURL.com/' + i, true);
xhrs.onreadystatechange = function()
{
if (this.readyState == 4)
{
$(this.responseText).find('a').each(function()
{
var url = $(this).attr('href');
console.log(url);
});
}
}
xhrs.send();
}
正如其他人所说,如果 $
表明您正在使用 jQuery,那么 jQuery.ajax()
可能会容易得多。
关于javascript - For 循环中的 XMLHttpRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198450/