我正在接受我正在收到的Instagram API响应。我只是在检查重复项后,将每个标记调用响应的数据对象推送到我的空结果数组中。
结果阵列的表现很奇怪。在控制台中,结果数组显示完整的结构,并且长度为5,如预期的那样。记录results.length时,它显示的长度为零。我创建了一个带有虚拟对象的测试数组作为比较,以显示它应该如何表现。
我的控制台截图如下。
奇怪的是,results.length似乎在for循环检查重复项时正常运行。
var token = 'MY_TOKEN',
userid = MY_ID,
num_photos = 33,
hashtags = ['website', 'engraving', 'weddinginvitations', 'customstationery'],
results = [],
test_results = [{id:1},{id:2},{id:3}];
// LOOP THROUGH EACH HASH
for(i = 0; i < hashtags.length; i++){
// MAKE AJAX CALL PER HASH
$.ajax({
url: 'https://api.instagram.com/v1/tags/' + hashtags[i] + '/media/recent',
dataType: 'jsonp',
type: 'GET',
data: {access_token: token, count: num_photos},
success: function(response){
// CHECK EACH IMAGE IN THE RESPONSE DATA AND REMOVE DUPLICATES
for( x in response.data ){
var exists = false;
for(var i=0;i<results.length;i++){
if( results[i].id === response.data[x].id ){
exists = true;
break;
}
}
if(exists === false){
results.push(response.data[x]);
}
}
},
error: function(data){
console.log(response);
}
});
}
console.log(results);
console.log(results.length);
console.log(test_results);
console.log(test_results.length);
答案 0 :(得分:0)
成功函数是异步执行的,dev工具将在您展开对象时评估对象的内容。
如果您查看首次登录的阵列的屏幕截图,您会看到它显示为空。只有在您展开它之后才能看到它的内容。在记录它和扩展它之间,它有足够的时间来运行和填充它。
答案 1 :(得分:0)
ajax调用是异步的,所以你得到0长度,因为没有一个调用完成。所以在成功回调中移动console.log,如下所示:
if(exists === false){
results.push(response.data[x]);
}
if(i === hashtags.length-1){
console.log(results);
console.log(results.length);
}