无法读取未定义JSON的属性“ 0”

苏兹

我正在尝试使图像滑块每隔几秒钟更改一次图像“ displayMain”。我的问题是,当我在setInterval中调用displayMain函数时,我不断收到“无法读取未定义的属性0”错误。即使当我使用jsonData [i] .name的硬编码值时,我也会收到相同的错误。不过,在displayThumbs中传递值就可以了。有谁知道为什么我不能在displayMain中保留值,但可以在displayThumbs中保留呢?

window.addEventListener('load', function () {
    var mainDiv = document.getElementById('main');
    var descDiv = document.getElementById('main-description');
    var gallery = document.querySelector('#main-img');
    var ul = document.querySelector('ul');
    var li;
    var i = 0;
    var displayThumbs;
    var thumbName;
    var current = 0;
    var images = [];

    function displayMain () {
        var data = images[i];
        gallery.src = 'img/' + data[0];
        descDiv.innerHTML = '<h2>' + data[1] + '</h2>';
    }

    function displayThumbs () {
        for (i = 0; i < images.length; i += 1) {
            var data = jsonData[i].name.replace('.jpg', '_thumb.jpg');
            // thumbnails use dom to make img tag
            li = document.createElement('li');
            thumbs[i] = document.createElement('img');
            var createThumbNail = thumbs[i].src = 'img/' + data;
            thumbs[i].setAttribute('alt', data);
            thumbs[i].addEventListener('click', function() {
                alert(createThumbNail);
            });
            ul.appendChild(thumbs[i]);
        }
    }

    // success handler should be called
    var getImages = function () {
        // create the XHR object
        xhr = new XMLHttpRequest();
        // prepare the request
        xhr.addEventListener('readystatechange', function () {
            if (xhr.readyState === 4 && xhr.status == 200) {
                // good request ...
                jsonData = JSON.parse(xhr.responseText);
                for (var i = 0; i < jsonData.length; i += 1) {
                    var data = [];
                    data.push(jsonData[i].name);
                    data.push(jsonData[i].description);
                    images.push(data);
                }

                displayMain();
                displayThumbs();
                setInterval(displayMain, 1000);
            }
            else {
                // error
            }    
        });

        xhr.open('GET', 'data/imagedata.json', true);
        xhr.send(null);    
    };

    // setInterval(getImages, 2000);
    getImages();
    // displayThumbs();
});
跳动

您的问题是您displayMain使用的是当时的任何值i,并且i永远不会递增,因此在for循环之后它将等于images.length displayThumbsdisplayThumbs它本身会增加,因此您永远不会超出数组的末尾。

在您的评论中,您提到要循环浏览图像。这应该工作得更好:

function displayMain () {
    var data;

    // wrap around to the first image
    if (i >= images.length) {
        i = 0;
    }

    data = images[i];
    gallery.src = 'img/' + data[0];
    descDiv.innerHTML = '<h2>' + data[1] + '</h2>';
    i++;
}

就个人而言,我将使用private i,以防另一个函数重复使用相同的变量:

function displayMain () {
    var data;

    // wrap around to the first image
    if (displayMain.i >= images.length || isNaN(displayMain.i)) {
        displayMain.i = 0;
    }

    data = images[displayMain.i];
    gallery.src = 'img/' + data[0];
    descDiv.innerHTML = '<h2>' + data[1] + '</h2>';

    // move to the next image
    displayMain.i++;
}

这将给i该函数附加一个名为的变量displayMain它将在每次调用时更新此变量,并且没有其他函数将使用相同的i变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法读取未定义的属性0

JSON - 未捕获的类型错误:无法读取未定义的属性(读取“0”)

无法读取未定义的属性(读取“0”)-(邮递员的空错误 JSON 响应)

React TypeError:无法读取未定义的属性“0”

TypeError:无法读取未定义的CryptoJS的属性“ 0”

ReactJS-TypeError:无法读取未定义的属性“ 0”

NPM无法读取未定义的属性“ 0”

为什么我无法读取未定义的属性“ 0”?

Ionic InfiniteScroll:TypeError:无法读取未定义的属性“ 0”

无法读取未定义的属性“ 0”-JavaScript

Javascript Uncaught TypeError:无法读取未定义的属性“ 0”

无法读取文件上传的未定义属性“0”

For循环:TypeError:无法读取未定义的属性“ 0”

角度:无法读取未定义的属性“ 0”

为什么TypeError:无法读取未定义的属性“ 0”?

JavaScript测验TypeError:无法读取未定义的属性“ 0”

Nativescript Vue TypeError:无法读取未定义的属性“ 0”

React Native无法读取未定义的属性“ 0”

无法读取角度6中未定义的属性“ 0”

AWS Lambda:“无法读取未定义的属性‘0’”

收到此错误:无法读取未定义的属性“0”

$ .getJSON,无法读取未定义的属性“ 0”

未捕获的TypeError:无法读取未定义的属性“ 0”

未捕获的TypeError:无法读取未定义的属性“ 0”

类型错误,无法读取未定义的属性 0

React js 错误:无法读取未定义的属性“0”

JSON 中的意外标记 o 在位置 1 或无法读取未定义的属性“0”

从mongoDB读取环境变量时,“无法读取未定义的属性'0'”

未捕获的类型错误:无法在第 13:1 行读取未定义的属性(读取“0”)