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