Javascript For循环XMLHttpRequest记录的值顺序不正确
我需要这个代码来找到所有的URL的几个网页,并列出他们在控制台中的特定顺序。我需要列表以fakeURL.com/0中的URL开始,以fakeURL.com/20结束,并始终保持有序。问题是,有时它会在fakeURL.com/2的URL之前列出来自(例如)fakeURL.com/5的URL 它还需要在每个网页的顺序-URL的,更接近网页的顶部应该放在第一位 是什么导致列表出错,我如何修复它Javascript For循环XMLHttpRequest记录的值顺序不正确,javascript,jquery,for-loop,xmlhttprequest,Javascript,Jquery,For Loop,Xmlhttprequest,我需要这个代码来找到所有的URL的几个网页,并列出他们在控制台中的特定顺序。我需要列表以fakeURL.com/0中的URL开始,以fakeURL.com/20结束,并始终保持有序。问题是,有时它会在fakeURL.com/2的URL之前列出来自(例如)fakeURL.com/5的URL 它还需要在每个网页的顺序-URL的,更接近网页的顶部应该放在第一位 是什么导致列表出错,我如何修复它 var i; function ajaxCall (x) { var xhrs = new
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);
}
vari;
函数ajaxCall(x)
{
var xhrs=newXMLHttpRequest();
xhrs.open(“get”http://fakeURL.com/“+x,对);
xhrs.onload=函数()
{
var doc=xhrs.response;
$(doc).find('a').each(function()
{
var url=$(this.attr('href');
console.log(url);
});
}
xhrs.responseType='document';
xhrs.send();
}
对于(i=0;i默认情况下,XMLHttpRequest
是异步的。因此,如果您使用1,2,3,…20调用ajaxCall()
(对于您的特定情况),这并不保证URL以相同的顺序打印(console.log)
有关更多信息,请阅读尽管在For
循环中增量遍历,但仍会导致值出现无序的原因是XMLHttpRequest
默认情况下(即异步)就是这样工作的
从中,在异步HTTP请求中,当请求在后台发生时,元素不会冻结,一旦获取资源,您可以使用回调
函数点击它们
同步请求会阻止代码的执行,从而在屏幕上造成“冻结”和无响应的用户体验
因此,在您的情况下,同步请求似乎是一种可行的方法,但它们会影响性能,当然也可能会导致糟糕的用户体验
我可以为您的案例建议一个简单的解决方法,我理解就是列出URL,就是让URL以任何方式获取。将它们存储在数组中,并为它们添加另一个名为page\u id
的属性,或者一些可以帮助您识别链接顺序的东西。这样最外层的链接可以比如:
var a = {link: "http://fakeURL.com/1", page_id: 1};
//Store such objects in a list.
对于一个页面上的内部链接,也可以让它们按照自己的意愿进行解析,只需使用Jquery中的.index()
将它们的索引与它们关联即可
//html
foo
酒吧
- baz
//Javascript
var listItem=document.getElementById(“bar”);
警报(“索引:”+$(“li”).Index(列表项));
//产出-指数:1
现在,当您需要显示链接时,只需使用page\u id
属性或depth
属性对相关列表进行排序,并相应地显示它们。希望您能从正确的方向开始
//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