정의되지 않은 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();
});
Beatgammit

문제는 당시 displayMaini무엇이든 사용 하고 i결코 증가하지 않으므로 displayThumbs. displayThumbs증가하므로 배열의 끝을 넘지 않습니다.

귀하의 의견에서 이미지를 순환하고 싶다고 언급했습니다. 이것은 조금 더 잘 작동합니다.

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++;
}

개인적으로 i다른 함수가 동일한 변수를 재사용하는 경우를 대비 하여 private을 사용 합니다.

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리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

TypeError : 정의되지 않은 CryptoJS의 '0'속성을 읽을 수 없습니다.

분류에서Dev

$ .getJSON, 정의되지 않은 속성 '0'을 (를) 읽을 수 없습니다.

분류에서Dev

For 루프 : TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 '0'속성을 읽을 수 없음-JavaScript

분류에서Dev

포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 '$ on'속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 'then'속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 JavaScript의 속성 '0'을 설정할 수 없습니다.

분류에서Dev

해결 / React.js TypeError : 정의되지 않은 [Tic Tac Toe]의 '0'속성을 읽을 수 없습니다.

분류에서Dev

Pokemon API Uncaught TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

TypeError : 상태를 사용할 때 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

Google Apps Script-TypeError : 정의되지 않은 속성 '0'을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 상태에서 "0"속성을 읽을 수 없습니다. Google Apps Script 오류

분류에서Dev

TypeError : 각도 앱에서 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

Facebook 메신저 봇 오류 "TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다."

분류에서Dev

날짜 확인-정의되지 않은 속성 "0"을 읽을 수 없습니다.

분류에서Dev

데이터를 가져올 수 없습니다. 처리되지 않은 거부 (TypeError) : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

JSON-정의되지 않은 속성 '뷰어'를 읽을 수 없습니다.

분류에서Dev

TypeError가있는 생성자의 정의되지 않은 배열 : 정의되지 않은 '0'속성을 읽을 수 없습니다.

분류에서Dev

TypeError : 정의되지 않은 '성공'속성을 읽을 수 없습니다.

분류에서Dev

Angular : 정의되지 않은 TypeError의 'routeConfig'속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 React Hooks의 속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 Express API의 'count'속성을 읽을 수 없습니다.

분류에서Dev

정의되지 않은 React의 'toLowerCase'속성을 읽을 수 없습니다.

Related 관련 기사

  1. 1

    TypeError : 정의되지 않은 CryptoJS의 '0'속성을 읽을 수 없습니다.

  2. 2

    $ .getJSON, 정의되지 않은 속성 '0'을 (를) 읽을 수 없습니다.

  3. 3

    For 루프 : TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  4. 4

    정의되지 않은 '0'속성을 읽을 수 없음-JavaScript

  5. 5

    포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  6. 6

    포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  7. 7

    포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  8. 8

    포착되지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  9. 9

    정의되지 않은 속성을 읽을 수 없습니다.

  10. 10

    정의되지 않은 '$ on'속성을 읽을 수 없습니다.

  11. 11

    정의되지 않은 'then'속성을 읽을 수 없습니다.

  12. 12

    정의되지 않은 속성을 읽을 수 없습니다.

  13. 13

    정의되지 않은 JavaScript의 속성 '0'을 설정할 수 없습니다.

  14. 14

    해결 / React.js TypeError : 정의되지 않은 [Tic Tac Toe]의 '0'속성을 읽을 수 없습니다.

  15. 15

    Pokemon API Uncaught TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  16. 16

    TypeError : 상태를 사용할 때 정의되지 않은 '0'속성을 읽을 수 없습니다.

  17. 17

    Google Apps Script-TypeError : 정의되지 않은 속성 '0'을 읽을 수 없습니다.

  18. 18

    정의되지 않은 상태에서 "0"속성을 읽을 수 없습니다. Google Apps Script 오류

  19. 19

    TypeError : 각도 앱에서 정의되지 않은 '0'속성을 읽을 수 없습니다.

  20. 20

    Facebook 메신저 봇 오류 "TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다."

  21. 21

    날짜 확인-정의되지 않은 속성 "0"을 읽을 수 없습니다.

  22. 22

    데이터를 가져올 수 없습니다. 처리되지 않은 거부 (TypeError) : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  23. 23

    JSON-정의되지 않은 속성 '뷰어'를 읽을 수 없습니다.

  24. 24

    TypeError가있는 생성자의 정의되지 않은 배열 : 정의되지 않은 '0'속성을 읽을 수 없습니다.

  25. 25

    TypeError : 정의되지 않은 '성공'속성을 읽을 수 없습니다.

  26. 26

    Angular : 정의되지 않은 TypeError의 'routeConfig'속성을 읽을 수 없습니다.

  27. 27

    정의되지 않은 React Hooks의 속성을 읽을 수 없습니다.

  28. 28

    정의되지 않은 Express API의 'count'속성을 읽을 수 없습니다.

  29. 29

    정의되지 않은 React의 'toLowerCase'속성을 읽을 수 없습니다.

뜨겁다태그

보관