javascript - For 循环中的 XMLHttpRequest

标签 javascript for-loop xmlhttprequest

这段代码应该循环遍历几个网页并找到每个页面上的所有链接,并在控制台中列出它们,但它似乎只列出最后一个网页(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/

相关文章:

php - 从 HTML 调用 Javascript 函数

javascript - 如何在加载时从标签标题添加按钮值

java - 为什么 IE 不显示带有 GWT Window.open() 的 PDF 文件下载对话框?

jQuery 回调函数仅在最后一个循环中触发

scala - 在 Scala 中使用 Double 进行 for 循环

javascript - 实例化 XMLHttpRequest 对象的最佳方法

javascript - NS_ERROR_FAILURE : Failure in Firefox

javascript - 使用 CreateJS 按下鼠标并移动会将 chrome Canvas 降低到 30FPS

javascript - 将 JavaScript 数据发送到 PHP 页面

python - 是使用嵌套循环进行更大的重复还是将整个范围放入一个循环中更好?哪个更快/更简单?