• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 웹개발 기능대회 예제 질문

웹개발 기능대회 예제 질문

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #117902

    손보현
    참가자
    안녕하세요  
    웹개발 기능대회 처음부터 막혀서 ㅠ 질문드립니다
    그 이전 강좌에 있던 get요청으로 JSON 데이터를 서버에서 가져오고 어레이에 넣어서 카드 생성하는 방법으로 하려고 했습니다
    그래서 로컬의 JSON 파일을 받아서 우선 어레이에 넣으려고 했는데요  
    
    이전 강좌 숙제할때는 분명
     $.get('https://codingapple1.github.io/js/more1.json').done(function(data){
                        data.forEach(function(a,b){
                        products.push(data[b]);
                    });
    이렇게 forEach 루프가 에러 없이 가능했는데
     기능대회 예제에서는
    
        $.get('store.json').done(function(data){
            data.forEach(function(a,i){
                products.push(data[i]);
            });
        
    });
    이렇게 쓰면 
    testPage.html:65 Uncaught TypeError: data.forEach is not a function
    
    이 에러가 나옵니다
    
    이전 강좌나 기능대회 예제의 JSON파일 모두 
    console.log(typeof data) 로 확인해보면 object로 동일합니다
    두 json 데이터가 모두 오브젝트를 가져와서 forEach를 못쓴다고 하기엔 왜 이전 강좌에선 되고 이 기능대회 예제에서는 안되는지 이유가 궁금합니다
    답변 부탁드릴게요 감사합니다 
    
    
     
     
    #117904

    codingapple
    키 마스터
    기능대회 그건 object라서 .forEach 못붙이는게 아닐까요 출력해봅시다
    array나 object나 typeof로 찍어보면 object나옵니다
    #118034

    손보현
    참가자
    네 말씀대로 기능대회 JSON 파일은 약간 달라서 forEach가 안되는거였습니다 근데 처리하다가 궁금한 점이 생겼는데요
    
     var productsArr =[];
    
    $.get('store.json', function(data){
            console.log(data.products.length);
            for(var i=0; i < data.products.length; i++){
                productsArr.push(data.products[i]);
        
           }
          
            console.log(productsArr);
           //length: 4
           console.log(productsArr.length);
        });
      
        console.log(productsArr);
       //length : 0 
       console.log(productsArr.length);
    위의 get요청을 하고 JSON을 받아 자료를 productsArr array에 넣었습니다
    제 생각으로는 productsArr은 get 요청 밖에 변수가 선언됐으니 get 요청 밖에서 엑세스가 돼도 같은 값이 나와야하는데
    출력해본 결과 get요청 내부의 productsArr 은 JSON의 object가 제대로 들어간 length가 4인 어레이가 나오는 반면
    get 요청 밖에서 출력된 productsArr은 length가 0 이 나오고 element가 있는걸로 나오긴 하지만 인덱스로 access가 안됩니다
    위의 get요청에서 done 이나 then 메소드를 써봐도 결과는 같았는데요
    이건 scope의 문제인가요 아님 get 요청에 뭔가 제가 놓친 부분이 있는건가요?
    html을 get 요청 내부에 만들면 과제 해결에는 문제가 없지만 그래도 변수 값이 달라지는게 궁금해서 질문드립니다
     
    #118071

    codingapple
    키 마스터
    ajax함수.done은 원래 다른거보다 늦게처리되어서 그 밑에 있는 
       console.log(productsArr);
       //length : 0 
       console.log(productsArr.length);
    이런 코드가 먼저 실행되어서 그렇습니다
    
    
    		
    	
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠