Javascript 未捕获类型错误:无法设置属性';0';未定义的

Javascript 未捕获类型错误:无法设置属性';0';未定义的,javascript,Javascript,我正在使用Facebook Javascript API将Facebook页面的相册和照片导入我的网站 我的javascript代码如下所示: <script> var albumPhotos = new Array(); var albumThumbnails = new Array(); window.fbAsyncInit = function() { // init the FB JS SDK

我正在使用
Facebook Javascript API
将Facebook页面的
相册
照片
导入我的网站

我的javascript代码如下所示:

<script>
        var albumPhotos = new Array();
        var albumThumbnails = new Array();
        window.fbAsyncInit = function() {
            // init the FB JS SDK 
            FB.init({
                appId      : '5698434687426',                    // App ID from the app dashboard
                channelUrl : 'channel.html',                       // Channel file for x-domain comms
                status     : true,                                 // Check Facebook Login status
                xfbml      : true                                  // Look for social plugins on the page
            });

            // Additional initialization code such as adding Event Listeners goes here
            FB.api('1607099163/albums', function(response) {
                if(!response || response.error) {
                    // render error
                    alert("Noo!!");
                } else {
                    // render photos
                    for(var i=0; i<response.data.length; i++){  
                        (function (i) {
                            var albumName = response.data[i].name;
                            var albumCover = response.data[i].cover_photo;
                            var albumId = response.data[i].id;
                            var numberOfPhotos = response.data[i].count

                            FB.api(albumId + "/photos", function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    for(var k=0; k<numberOfPhotos; k++){
                                         albumThumbnails[i][k] = response.data[k].picture;
                                         albumPhotos[i][k] = response.data[k].source;
                                    }
                                }
                            }); 


                            console.log(albumName);
                            FB.api( albumCover, function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    // render photos
                                    $(".albums").append('<li>'+
                                        '<a href="#Gallery' + i + '"' + 'data-transition="slidedown">'+
                                        '<img src= "' + response.picture + '"  />'+
                                         '<h2>' + albumName + '</h2>'+
                                         '<p>' + "Number of Photos:  " + numberOfPhotos +'</p>'+
                                         '</a>'+
                                         '</li>')
                                    .listview('refresh');

                                    $("#home").after('<div data-role="page" data-add-back-btn="true" id=Gallery'+ i +
                                        ' class="gallery-page"> ' +
                                        ' <div data-role="header"></div> ' + ' <div data-role="content"> ' +
                                        ' <ul class="gallery"></ul> ' + ' </div> ' +
                                        ' </div> ');


                                }
                            }); 
                        })(i);                                      
                    } //end of for loop
                }
            });

        };
for(var k=0; k<numberOfPhotos; k++){
              albumThumbnails[i][k] = response.data[k].picture;
              albumPhotos[i][k] = response.data[k].source;
                                   }
<script>
        var albumPhotos = new Array();
        var albumThumbnails = new Array();
        window.fbAsyncInit = function() {
            // init the FB JS SDK 
            FB.init({
                appId      : '564984346887426',                    // App ID from the app dashboard
                channelUrl : 'channel.html',                       // Channel file for x-domain comms
                status     : true,                                 // Check Facebook Login status
                xfbml      : true                                  // Look for social plugins on the page
            });

            // Additional initialization code such as adding Event Listeners goes here
            FB.api('169070991963/albums', function(response) {
                if(!response || response.error) {
                    // render error
                    alert("Noo!!");
                } else {
                    // render photos
                    for(var i=0; i<response.data.length; i++){  
                        (function (i) {
                            var albumName = response.data[i].name;
                            var albumCover = response.data[i].cover_photo;
                            var albumId = response.data[i].id;
                            var numberOfPhotos = response.data[i].count;

                            FB.api(albumId + "/photos", function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    for(var k=0; k<response.data.length; k++){ 
                                         albumThumbnails[i] =  albumThumbnails[i]||{};
                                         albumThumbnails[i][k] = response.data[k].picture;
                                         albumPhotos[i] = albumPhotos[i] || {};
                                         albumPhotos[i][k] = response.data[k].source;
                                    }
                                }
                            }); 

                            console.log(albumName);
                            FB.api( albumCover, function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    // render photos
                                    $(".albums").append('<li>'+
                                        '<a href="#Gallery' + i + '"' + 'data-transition="slidedown">'+
                                        '<img src= "' + response.picture + '"  />'+
                                         '<h2>' + albumName + '</h2>'+
                                         '<p>' + "Number of Photos:  " + numberOfPhotos +'</p>'+
                                         '</a>'+
                                         '</li>')
                                    .listview('refresh');

                                    $("#home").after('<div data-role="page" data-add-back-btn="true" id=Gallery'+ i +
                                        ' class="gallery-page"> ' +
                                        ' <div data-role="header"><h1>Gallery</h1></div> ' + ' <div data-role="content"> ' +
                                        ' <ul class="gallery"></ul> ' + ' </div> ' +
                                        ' </div> ');

                                    for(var x=0; x < albumPhotos[i].length; x++)
                                        $('#Gallery' + i + ' .gallery').append('<li><a href="' + albumPhotos[i][x] + '" rel="external"><img src="' +  albumThumbnails[i][x] + '" /></a></li>');

                                }
                            }); 
                        })(i);                                      
                    } //end of for loop
                console.log(albumPhotos);
                console.log(albumThumbnails);
                }
            });

        };
但此时我得到了错误:
uncaughttypeerror:无法设置未定义的属性“0”

我无法理解什么是未定义的。。。有什么想法吗

*顺便说一句,我下一次调用FB.API(albumCover,function(response){..}来获取相册的封面照片并创建jquery mobile listView时,它也可以工作

编辑
下面提供的答案解决了二维表格问题

但是现在的错误是:
uncaughttypeerror:无法读取未定义的属性“picture”

编辑2
我在代码后面遇到了相同的问题,因此我正在进行此编辑。代码现在看起来如下所示:

<script>
        var albumPhotos = new Array();
        var albumThumbnails = new Array();
        window.fbAsyncInit = function() {
            // init the FB JS SDK 
            FB.init({
                appId      : '5698434687426',                    // App ID from the app dashboard
                channelUrl : 'channel.html',                       // Channel file for x-domain comms
                status     : true,                                 // Check Facebook Login status
                xfbml      : true                                  // Look for social plugins on the page
            });

            // Additional initialization code such as adding Event Listeners goes here
            FB.api('1607099163/albums', function(response) {
                if(!response || response.error) {
                    // render error
                    alert("Noo!!");
                } else {
                    // render photos
                    for(var i=0; i<response.data.length; i++){  
                        (function (i) {
                            var albumName = response.data[i].name;
                            var albumCover = response.data[i].cover_photo;
                            var albumId = response.data[i].id;
                            var numberOfPhotos = response.data[i].count

                            FB.api(albumId + "/photos", function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    for(var k=0; k<numberOfPhotos; k++){
                                         albumThumbnails[i][k] = response.data[k].picture;
                                         albumPhotos[i][k] = response.data[k].source;
                                    }
                                }
                            }); 


                            console.log(albumName);
                            FB.api( albumCover, function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    // render photos
                                    $(".albums").append('<li>'+
                                        '<a href="#Gallery' + i + '"' + 'data-transition="slidedown">'+
                                        '<img src= "' + response.picture + '"  />'+
                                         '<h2>' + albumName + '</h2>'+
                                         '<p>' + "Number of Photos:  " + numberOfPhotos +'</p>'+
                                         '</a>'+
                                         '</li>')
                                    .listview('refresh');

                                    $("#home").after('<div data-role="page" data-add-back-btn="true" id=Gallery'+ i +
                                        ' class="gallery-page"> ' +
                                        ' <div data-role="header"></div> ' + ' <div data-role="content"> ' +
                                        ' <ul class="gallery"></ul> ' + ' </div> ' +
                                        ' </div> ');


                                }
                            }); 
                        })(i);                                      
                    } //end of for loop
                }
            });

        };
for(var k=0; k<numberOfPhotos; k++){
              albumThumbnails[i][k] = response.data[k].picture;
              albumPhotos[i][k] = response.data[k].source;
                                   }
<script>
        var albumPhotos = new Array();
        var albumThumbnails = new Array();
        window.fbAsyncInit = function() {
            // init the FB JS SDK 
            FB.init({
                appId      : '564984346887426',                    // App ID from the app dashboard
                channelUrl : 'channel.html',                       // Channel file for x-domain comms
                status     : true,                                 // Check Facebook Login status
                xfbml      : true                                  // Look for social plugins on the page
            });

            // Additional initialization code such as adding Event Listeners goes here
            FB.api('169070991963/albums', function(response) {
                if(!response || response.error) {
                    // render error
                    alert("Noo!!");
                } else {
                    // render photos
                    for(var i=0; i<response.data.length; i++){  
                        (function (i) {
                            var albumName = response.data[i].name;
                            var albumCover = response.data[i].cover_photo;
                            var albumId = response.data[i].id;
                            var numberOfPhotos = response.data[i].count;

                            FB.api(albumId + "/photos", function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    for(var k=0; k<response.data.length; k++){ 
                                         albumThumbnails[i] =  albumThumbnails[i]||{};
                                         albumThumbnails[i][k] = response.data[k].picture;
                                         albumPhotos[i] = albumPhotos[i] || {};
                                         albumPhotos[i][k] = response.data[k].source;
                                    }
                                }
                            }); 

                            console.log(albumName);
                            FB.api( albumCover, function(response) {
                                if(!response || response.error) {
                                    // render error
                                    alert("Noo!!");
                                } else {
                                    // render photos
                                    $(".albums").append('<li>'+
                                        '<a href="#Gallery' + i + '"' + 'data-transition="slidedown">'+
                                        '<img src= "' + response.picture + '"  />'+
                                         '<h2>' + albumName + '</h2>'+
                                         '<p>' + "Number of Photos:  " + numberOfPhotos +'</p>'+
                                         '</a>'+
                                         '</li>')
                                    .listview('refresh');

                                    $("#home").after('<div data-role="page" data-add-back-btn="true" id=Gallery'+ i +
                                        ' class="gallery-page"> ' +
                                        ' <div data-role="header"><h1>Gallery</h1></div> ' + ' <div data-role="content"> ' +
                                        ' <ul class="gallery"></ul> ' + ' </div> ' +
                                        ' </div> ');

                                    for(var x=0; x < albumPhotos[i].length; x++)
                                        $('#Gallery' + i + ' .gallery').append('<li><a href="' + albumPhotos[i][x] + '" rel="external"><img src="' +  albumThumbnails[i][x] + '" /></a></li>');

                                }
                            }); 
                        })(i);                                      
                    } //end of for loop
                console.log(albumPhotos);
                console.log(albumThumbnails);
                }
            });

        };

为什么我现在要这样做?

您将
相册缩略图
相册照片
作为空数组,并在循环中尝试向数组中添加值

让我们假设
i=0
您的数组
albumThumbnails
的长度为
0
,这意味着
albumThumbnails[0]
未定义,然后您尝试设置
albumThumbnails[0][0]
,这会产生错误

这里的解决方案是首先在索引
i
处创建一个空对象(如果需要),然后设置其属性

看起来您正在尝试在此处创建对象

for(var k=0; k<numberOfPhotos && k < response.data.length; k++){
    albumThumbnails[i] =  albumThumbnails[i]||{};
    albumThumbnails[i][k] = response.data[k].picture;
    albumPhotos[i] = albumPhotos[i] || {};
    albumPhotos[i][k] = response.data[k].source;
}

用于(var k=0;kYeap您是对的,但现在我得到了错误:Uncaught TypeError:无法读取未定义的属性“picture”。实际上,在我尝试将二维表复杂化之前,我从一开始就遇到了这个错误。这是因为response.data.lengthk@JohnyJaz您可以使用console.log打印值并查看结果