Instagram API响应 - 数组长度奇怪

时间:2017-09-26 22:48:06

标签: jquery arrays ajax jsonp instagram-api

我正在接受我正在收到的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);

enter image description here

2 个答案:

答案 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);
}