Javascript 如何在for循环中使用AJAX

Javascript 如何在for循环中使用AJAX,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想用从第一次AJAX调用中获得的新URL调用另一个AJAX函数。但如果我尝试这样的循环,它就会失败。我认为for循环不会等到AJAX完成它的工作,但我不知道如何应对它。有什么建议吗 <!DOCTYPE html> <html> <head> <title>Example</title> <meta name="viewport" co

我想用从第一次AJAX调用中获得的新URL调用另一个AJAX函数。但如果我尝试这样的循环,它就会失败。我认为for循环不会等到AJAX完成它的工作,但我不知道如何应对它。有什么建议吗

    <!DOCTYPE html>
            <html>
        <head>
            <title>Example</title>
            <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
            <link rel="stylesheet" href="bootstrap.min.css">
            <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
            <style>
        body{
            background-color: #D4DAD8;

        }
        #content {
        margin-left: auto;
        margin-right: auto;
        margin-top: 10px;
        }
        #kastid{
        background-image: -ms-linear-gradient(top left, #FFFFFF 0%, #EDEDED 100%);
        background-image: -moz-linear-gradient(top left, #FFFFFF 0%, #EDEDED 100%);
        background-image: -o-linear-gradient(top left, #FFFFFF 0%, #EDEDED 100%);
        background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0, #FFFFFF), color-stop(1, #EDEDED));
        background-image: -webkit-linear-gradient(top left, #FFFFFF 0%, #EDEDED 100%);
        background-image: linear-gradient(to bottom right, #FFFFFF 0%, #EDEDED 100%);
        padding: 3px 3px;
        height: 400px;
        }
            </style>
        </head>
        <body>

           <div id="content"></div>

        <script type="text/javascript">
        var url1 = "https://www.readability.com/api/content/v1/parser?url=";
        var urltoken = "&token=18ba7d424a0d65facdaea8defa356bc3e430f8ce";
        var i = 0;
        var link = [];
        var finalurl = [];
        var pubDate = [];
        $.ajax({
            url:'https://www.readability.com/rseero/latest/feed',
            dataType:'xml',
            type:'GET',
            success:function(xml) {
                 $(xml).find('item').each(function() {
                    pubDate[i] = $(this).find("pubDate").text();                
                    link[i] = $(this).find("link").text();           
                    finalurl[i] = url1 + link[i] + urltoken; 
                    console.log(i);
                    console.log(finalurl[i]);
                    console.log(link[i]);
                    i++;
                 });
            },
            error:function() {
                alert("Feed error.1.!");
            }
        }).done(function () {
            for(i = 0; i < finalurl.length; i++) {
            getInfo(i);
        }
        });
        function getInfo(i) {
        $.ajax({
            url:finalurl[i],
            dataType:'xml',
            type:'GET',
            success:function(xml) {
                console.log(finalurl[i]);
                var title = $(this).find("title").text();
                var content = $(this).find("content").text();
                $("#content").append('<div class="col-md-4 col-xs-12" id="kastid"><a href="'+link[i]+'">'+title+'</a><p><p>'+pubDate[i]+'<p><p>'+description);
            },
            error:function() {
                console.log(finalurl[i]);
                alert("Feed error..!");
            }
        });
        }
        </script>
        </body>
        </html>

例子
身体{
背景色:#D4DAD8;
}
#内容{
左边距:自动;
右边距:自动;
边缘顶部:10px;
}
#卡斯蒂德{
背景图像:-ms线性渐变(左上角,#FFFFFF 0%,#EDEDED 100%);
背景图像:-moz线性渐变(左上角,#FFFFFF 0%,#EDEDED 100%);
背景图像:-o-线性梯度(左上,#FFFFFF 0%,#EDEDED 100%);
背景图像:-webkit渐变(线性、左上、右下、颜色停止(0,#FFFFFF)、颜色停止(1,#eded));
背景图像:-webkit线性渐变(左上角,#FFFFFF 0%,#EDEDED 100%);
背景图像:线性渐变(至右下角,#FFFFFF 0%,#EDEDED 100%);
填充:3px 3px;
高度:400px;
}
变量url1=”https://www.readability.com/api/content/v1/parser?url=";
var urltoken=“&token=18ba7d424a0d65facdaea8defa356bc3e430f8ce”;
var i=0;
var-link=[];
var finalurl=[];
var pubDate=[];
$.ajax({
网址:'https://www.readability.com/rseero/latest/feed',
数据类型:'xml',
类型:'GET',
成功:函数(xml){
$(xml).find('item').each(function(){
pubDate[i]=$(this.find(“pubDate”).text();
link[i]=$(this.find(“link”).text();
finalurl[i]=url1+链接[i]+urltoken;
控制台日志(i);
控制台日志(finalurl[i]);
console.log(链接[i]);
i++;
});
},
错误:函数(){
警报(“馈送错误1.!”;
}
}).done(函数(){
对于(i=0;i
使用
Promise
功能。这允许您在异步代码完成运行后运行一段代码。这意味着使用承诺,在第一个ajax完成后,可以执行第二个ajax并从第一个ajax访问数据


请注意,
$.ajax()
的返回对象实现了
Promise
接口,可以直接用作Promise。

我不太理解这一点。你能告诉我如何在我的代码中实现这个承诺吗。我使用了async:false,async:false将停止所有javascript代码的执行,直到ajax响应。这将使一切崩溃。haha@Larry
asyc:false
将阻塞线程,每次迭代都必须等待最后一次调用完成。