JQuery中的Ajax无法返回正确的结果

时间:2018-09-15 10:39:12

标签: javascript jquery ajax

我正在尝试在Ajax请求的内部范围内返回唯一结果。

var id = pooInLoo['timeline'][e][i]['_id']; 
$.ajax({
    url: '/api/'+id+'/lovequantity',
    type: 'GET',
        success: function(loveCount) {
            console.log('inside: ' +id);
            $('#'+id).append(loveCount);
        }
    });

console.log在该Ajax请求中仅返回一个结果。实际上,应该记录3个唯一的ID。

$.ajax({
            url: '/api/timeline/profile',
            type: 'GET',
            success: function(pooInLoo) {
                for(var e = 0; e < pooInLoo['timeline'].length; e++) {
                    for (var i = 0; i < pooInLoo['timeline'][e].length; i++) {
                        var id = pooInLoo['timeline'][e][i]['_id']; 
                        $.ajax({
                            url: '/api/'+id+'/lovequantity',
                            type: 'GET',
                            success: function(loveCount) {
                                console.log('inside: ' +id);
                                $('#'+id).append(loveCount);
                            }
                        });
                        console.log('outside: ' +id);
                        $('#timelineWrapper').append('<div class="timeline"> <div class="row"> <div class="col-sm-12 col-lg-12"> <div id="author"> <div id="profilePhoto"> <img src="" /> </div> <div id="name"> <h6> @'+pooInLoo['timeline'][e][i]['username']+'</h6> </div> </div> <hr> <div id="bookData"> <div id="bookCover"> </div> <div id="bookDetails"> <h4> '+pooInLoo['timeline'][e][i]['title']+' </h4> <h5> '+pooInLoo['timeline'][e][i]['author']+' </h5> <h6 id="'+pooInLoo['timeline'][e][i]['_id']+'"> <i class="fas fa-heart"></i></h6> </div> </div> </div> </div> </div>');
                    }
                }
            }
        });

我已将console.log从内部范围“ inside”与外部范围“ outside”分开。

外部范围返回正确的3个不同结果,而内部范围仅返回3个结果。

outside: 5b90e133ef88180357689b54 
outside: 5b9383c923f0a302693b8d3e
outside: 5b93840623f0a302693b8d40 
inside: 5b93840623f0a302693b8d40 x3

我该怎么做才能使内部范围返回3个不同的ID?

1 个答案:

答案 0 :(得分:0)

“内部”范围内的id变量只是对“外部”范围内id的引用。由于“内部”是一个回调函数,因此它被异步调用,并且在调用时,id几乎设置为在嵌套的for循环中迭代的最后一个id,这可能是您记录了3个相同id的原因从内部范围来看。我认为您可以通过将id从外部范围复制到回调函数的范围而不是引用来解决问题。