2013-01-06 48 views
2

我正在为我的第一个WinJS应用程序的Windows 8,我只是想要替换2网格模板中给出的基本代码,我越来越这个错误:WinJS - 无法获取属性'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) { } 
    ); 
} 

以下正从一个PHP Web服务这是返回JSON数据的数据:

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

我能看到sampleItems数据:

watch window with object data

我明明做错事,因为当我将我的对象结果与原始示例数据的结果进行比较,结果几乎相同。

任何帮助表示赞赏。

+0

您的getData函数返回null或undefined。这就是错误信息告诉你的。您分享了错误功能的代码。 –

+0

getData调用OnSuccessCall - 为了清晰起见,我将添加getData函数 – webdad3

回答

3

您的getData()函数没有return语句,因此它返回undefinedundefined上不能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(...) }); 
相关问题