Javascript无法正确解析JSON中的对象
我试图获得一个重复框,用JSON文档中的对象填充它。但是,它不会添加每个项目,而是添加JSON文档中第一个项目的多个副本。有什么线索说明原因吗 我使用以下代码从JSON文档中提取对象Javascript无法正确解析JSON中的对象,javascript,json,smartface.io,Javascript,Json,Smartface.io,我试图获得一个重复框,用JSON文档中的对象填充它。但是,它不会添加每个项目,而是添加JSON文档中第一个项目的多个副本。有什么线索说明原因吗 我使用以下代码从JSON文档中提取对象 function Project_WebClient1_OnSyndicationSuccess(e){ var FactsArray = []; var parsedResponse = JSON.parse(this.responseText); var numOfFacts = p
function Project_WebClient1_OnSyndicationSuccess(e){
var FactsArray = [];
var parsedResponse = JSON.parse(this.responseText);
var numOfFacts = parsedResponse.results.length;
for (var i = 0; i < numOfFacts; i++) {
var FactsObject = {};
FactsObject.heading = parsedResponse.results[i].heading;
FactsObject.ReleaseDate = parsedResponse.results[i].ReleaseDate;
FactsObject.url = parsedResponse.results[i].url;
FactsArray.push(FactsObject);
log(FactsObject.heading);
}
Pages.pgFundInfo.RepeatBox1.dataSource = FactsArray;
Pages.pgFundInfo.RepeatBox1.refresh();
Data.notify("Data.FactSheets_OutDSetFactSheets.FactSheetsId");
}
我得到了正确数量的结果,但是,在我的repeatbox中,它列出了这些结果,但所有结果都使用了第一个条目的数据,而不是其他条目的数据
为此,我在for循环中做错了什么?根据您的JSON文档,这是循环的一部分
FactsObject.heading = parsedResponse.results[i].heading;
FactsObject.ReleaseDate = parsedResponse.results[i].ReleaseDate;
FactsObject.url = parsedResponse.results[i].url;
应改写为
FactsObject.heading = parsedResponse.results[i].Heading; // notice the capital H
FactsObject.ReleaseDate = parsedResponse.results[i].ReleaseDate; // maybe use the .iso attribute, if you don't want to assign the whole object
FactsObject.url = parsedResponse.results[i].FactFile.url; // notice the FactFile
否则它将得到未定义的结果
但我不确定是什么导致了只获取第一个项目,而不是每个项目的问题
编辑:
如果我只是跑
for (var i = 0, len = parsedResponse.results.length; i < len; i++) {
console.log(parsedResponse.results[i]);
}
for(var i=0,len=parsedResponse.results.length;i
每个独立的项目我都会得到,而不是第一个多次
参见@Decay42的建议修正是好的
我不知道你的RepeatBox配置是什么样子的。您可能需要定义一个onRowRender
函数
见:
另外,我很好奇循环中的log
函数做了什么,因为我认为没有全局JSlog
函数。我觉得代码很好。我只是想知道Pages.pgFundInfo.RepeatBox1.refresh()有什么作用。它只是在异步任务完成后刷新repeatbox。因此,在for循环结束之前,它是空白的,但一旦结束,它就会刷新以显示数据。它是否以某种方式更改了数据源?结果是什么:console.log(parsedResponse)代码>@JESLAB结果是什么:console.log(parsedResponse);您确定要从this.responseText
在结果上创建一个数组,其中包含不同的项,而不是重复在整个数组中的相同项???这是一个Smartface日志。它显示了Smartface界面中正在拉取的对象。@JESLAB结果是什么:console.log(parsedResponse);你确定从this.responseText
在results
上有一个数组,数组中重复了不同的项,而不是相同的项???好的,从控制台日志中可以看到,它正在查找一个名为results的对象。我猜是对该对象中的对象进行计数,以给出我的计数6,但使用第一个来呈现标题值?您能否告诉我们随附的内容:console.log(parsedResponse.results[I].heading)代码>就在var FactsObject={}之前的循环中代码>确定,日志现在显示正确的值。我想问题在于把我的标签正确地挂在重复框里。好的,这肯定就快到了。我尝试了这一点,并在日志上获取所有对象,但是,我的标签文本始终默认为第一个值。所以我猜这与我的标签的连接有关
for (var i = 0, len = parsedResponse.results.length; i < len; i++) {
console.log(parsedResponse.results[i]);
}