2013-01-06 2 views
2

Windows 8의 첫 번째 WinJS 응용 프로그램에서 작업 중이며 2 개의 표 템플릿에서 제공된 기본 코드를 대체하려고합니다. 이 오류 :WinJS - 정의되지 않은 또는 null 참조의 'forEach'속성을 가져올 수 없습니다.

Unable to get property 'forEach' of undefined or null reference 

내 코드 :

getData().forEach(function (item) { 
    list.push(item); 
}); 

초기 기능 :

function getData() { 

    // JSON request 
    WinJS.xhr({ 
     type: "GET", 
     url: "http://mytld.com/mobile/pagethatreturnsjsondata.php" 
    }).then(
      function (response) { 
       OnSuccessCall(response); 
      }, 
      function (error) { 
       var err = error; 
       console.log("Error : " + err.message); 
      }, 
      function (progress) { } 
    ); 
} 

다음 내가 sampleItems에서 데이터를 볼 수 있어요

function OnSuccessCall(response) { 
    var itemContent = "<p>Item Content</p>"; 
    var itemDescription = "Item Description"; 
    var groupDescription = "Group Description"; 

    // These three strings encode placeholder images. You will want to set the 
    // backgroundImage property in your real data to be URLs to images. 
    var darkGray = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXY3B0cPoPAANMAcOba1BlAAAAAElFTkSuQmCC"; 
    var lightGray = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXY7h4+cp/AAhpA3h+ANDKAAAAAElFTkSuQmCC"; 
    var mediumGray = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXY5g8dcZ/AAY/AsAlWFQ+AAAAAElFTkSuQmCC"; 

    // Each of these sample groups must have a unique key to be displayed separately. 
    var sampleGroups = [ 
     { key: "group1", title: "prayers", subtitle: "submitted prayers", backgroundImage: darkGray, description: groupDescription } 
    ]; 

    var x = response.responseText.length; 
    var json = JSON.parse(response.responseText); 
    var sampleItems = []; 
    for (var i = 0; i < json.length - 1; i++) { 
     sampleItems.push({ 
      group: sampleGroups[0], 
      title: json[i].text, 
      subtitle: "Item Subtitle: 1", 
      description: itemDescription, 
      content: itemContent, 
      backgroundImage: lightGray 
     }); 
    } 

    return sampleItems; 
} 

: JSON 데이터를 반환하는 PHP 웹 서비스에서 데이터를 받고있다

watch window with object data

내가 분명히 때와 같이 뭔가 잘못을하고 있어요 내 객체 결과를 원본 예제 데이터의 결과와 거의 동일하게 비교합니다.

도움을 주시면 감사하겠습니다.

+0

'getData' 함수가'null '또는'undefined'를 반환했습니다. 그것이 오류 메시지가 말하는 것입니다. 잘못된 기능에 대한 코드를 공유했습니다. –

+0

getData는 OnSuccessCall을 호출합니다 - 명확성을 위해 getData 함수를 추가하겠습니다. – webdad3

답변

3

getData() 함수에 return 문이 없으므로 undefined을 반환합니다. 그리고 에 forEach을 입력 할 수 없습니다.

큰 그림을 보면 : getData()xhr을 사용하므로 결과를 실제로 반환하지는 않으며 대신 비동기 적으로 데이터를 가져옵니다. 따라서 결과가 아직 존재하지 않으므로 forEach 반환 값을 사용할 수 없습니다. 약속이 완료 될 때까지 기다려야하며 약속 결과에 forEach으로 전화하십시오.

function getData() { 
    // add "return" here so the function returns a Promise 
    return WinJS.xhr({ 
     type: "GET", 
     url: "http://mytld.com/mobile/pagethatreturnsjsondata.php" 
    }).then(
      function (response) { 
       // add "return" here to specify the promise's completed value 
       return OnSuccessCall(response); 
      }, 
      function (error) { 
       var err = error; 
       console.log("Error : " + err.message); 
      }, 
      function (progress) { } 
    ); 
} 

이제 getData() 반환 뭔가 (약속) 당신이 약속이 완료 될 때 발생하는 작업을 예약 할 수 있습니다.

getData().then(function(results) { results.forEach(...) }); 
관련 문제