Windows 8 WinJS-无法获取属性';forEach&x27;指未定义的或空的引用

Windows 8 WinJS-无法获取属性';forEach&x27;指未定义的或空的引用,windows-8,microsoft-metro,winjs,Windows 8,Microsoft Metro,Winjs,我正在为Windows 8开发我的第一个WinJS应用程序,我正在尝试替换2网格模板中给出的基本代码,我遇到了以下错误: Unable to get property 'forEach' of undefined or null reference 我的代码: getData().forEach(function (item) { list.push(item); }); 初始功能: function getData() { // JSON request WinJ

我正在为Windows 8开发我的第一个WinJS应用程序,我正在尝试替换2网格模板中给出的基本代码,我遇到了以下错误:

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) { }
    );
}
下面是从返回JSON数据的php Web服务获取数据:

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;
}
函数OnSuccessCall(响应){ var itemContent=“项目内容”

”; var itemsdescription=“项目描述”; var groupDescription=“组描述”; //这三个字符串对占位符图像进行编码。您需要设置 //真实数据中的backgroundImage属性是图像的URL。 var darkGray=“数据:image/png;base64,ivborw0kgoaaaansuheugaaaaaaabcayaaffcsjaaaaaaaaxnsr0iars4c6qaarnqu1baacxjwv8yquaaaajcehzcwaadsqaa7eazurdhsaaansurbvbhxy3b0cpopaanmacoba1baacxjjw8yqaaaqaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqa; var lightGray=“数据:image/png;base64,ivborw0kggoaaaansuheugaaaaaaaababaaffcsjaaaaaaaaxnsr0iars4c6qaarnqu1baacxjw8yquaaaajcehzcwaadqaa7eazurdhsaaansurbvbhxy7h4+cp/AAhpA3h+和kaaaaelftksuqmcc”; var mediumGray=“数据:image/png;base64,ivborw0kggoaaansuheugaaaaaaaaabcayaaffcsjaaaaaaxnsr0iars4c6qaarnqu1baacxjv8yquaaaajcehzcwaadsqaa7eazurdhsaaansurbvbhxy5g8dcz/AAY/AsAlWFQ+aaaaaaaaaaaaaa elftksuqmcc”; //每个样本组都必须有一个单独显示的唯一键。 变量样本组=[ {关键字:“group1”,标题:“祈祷”,副标题:“提交的祈祷”,背景图片:darkGray,描述:groupDescription} ]; var x=response.responseText.length; var json=json.parse(response.responseText); var-sampleItems=[]; for(var i=0;i 我能够在sampleItems中看到数据:

我显然做错了什么,因为当我将我的对象结果与原始示例数据的结果进行比较时,它们实际上是相同的

非常感谢您的帮助。

您的
getData()
函数没有
return
语句,因此它返回
未定义的
。您不能在
未定义的
上使用
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(...) });

您的
getData
函数返回了
null
undefined
。这就是错误消息告诉您的。您共享了错误函数的代码。getData调用OnSuccessCall-为了清晰起见,我将添加getData函数