Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript For循环XMLHttpRequest记录的值顺序不正确_Javascript_Jquery_For Loop_Xmlhttprequest - Fatal编程技术网

Javascript For循环XMLHttpRequest记录的值顺序不正确

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

我需要这个代码来找到所有的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 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