簡體   English   中英

循環中的XMLHttpRequest

[英]XMLHttpRequest in For-Loop

該代碼應該在多個網頁中循環並找到每個頁面上的所有鏈接,並在控制台中將其列出,但似乎僅列出最后一個網頁(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變量。 因此,它們最終都會查看來自最后一個請求的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()可能會容易jQuery.ajax()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM