[英]For-Loop XMLHttpRequest logs values out of order
我需要此代碼來從幾個網頁中找到所有URL,並在控制台中以特定順序列出它們。 我需要列表以假URL.com/0中的URL開頭,並以fakeURL.com/20結尾,並始終保持順序。 問題在於,有時它會列出(例如)fakeURL.com/5中的URL,然后再列出來自fakeURL.com/2中的URL。
還需要在每個網頁中按順序排列-應該更接近網頁頂部的URL。
是什么導致列表混亂,如何解決?
var i;
function ajaxCall (x)
{
var xhrs = new XMLHttpRequest();
xhrs.open("get", 'http://fakeURL.com/' + x, true);
xhrs.onload = function()
{
var doc = xhrs.response;
$(doc).find('a').each(function()
{
var url = $(this).attr('href');
console.log(url);
});
}
xhrs.responseType = 'document';
xhrs.send();
}
for(i = 0; i <= 20; i++)
{
ajaxCall(i);
}
盡管在for
循環中遞增遍歷,但仍使值混亂的原因是因為XMLHttpRequest
是默認情況下(即異步)的工作方式
根據官方文檔 ,在異步 HTTP請求中,當請求在后台發生時,元素不會凍結,一旦獲取資源,就可以使用callback
函數來點擊它們。
同步請求阻止了代碼的執行,該代碼在屏幕上產生“凍結”,並導致無響應的用戶體驗。
因此,在您的情況下,同步請求似乎是行之有效的方法,但它們會影響性能,並且當然可能會導致不良的用戶體驗。
我可以為您的情況建議一個簡單的解決方法,據我了解,它只是列出URL,只是讓URL以它們想要的任何方式獲取。 將它們存儲在數組中,並向它們添加另一個屬性,稱為page_id
或可以幫助您確定鏈接順序的屬性。 因此,最外部的鏈接可能類似於:
var a = {link: "http://fakeURL.com/1", page_id: 1};
//Store such objects in a list.
對於一頁上的內部鏈接,也讓它們以任何想要的方式進行解析,然后只需在Jquery中使用.index()
它們的indices
與它們相關聯.index()
。 從文檔中 :
//html
<ul>
<li id="foo">foo</li>
<li id="bar">bar</li>
<li id="baz">baz</li>
</ul>
//Javascript
var listItem = document.getElementById( "bar" );
alert( "Index: " + $( "li" ).index( listItem ) );
//Outputs - Index: 1
現在,當您需要顯示鏈接時,只需對具有page_id
屬性或depth
屬性的相關列表進行排序,並進行相應顯示。 希望它能幫助您朝正確的方向開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.