Windows 8 WinJS-无法获取属性';forEach&x27;指未定义的或空的引用
我正在为Windows 8开发我的第一个WinJS应用程序,我正在尝试替换2网格模板中给出的基本代码,我遇到了以下错误: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
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;igetData()
函数没有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函数