我制作了一个API,它接收数据库数据并将JSON数据传递给ionic2 app。数据可能包含与用户发送的密钥相关的数据。因此,所有用户可能无法同时存在所有数据,这就是我为所有用户编写公共代码的原因。我的问题是当数据节点不存在于JSON文件中,然后页面断开说“未定义”对象。我该如何解决这个问题?
打字稿方法
displayData()
{
if(this.responseDetails[0].DocumentTypeDetails.Deed.Checked)
this.showDeed= this.responseDetails[0].DocumentTypeDetails.Deed.Checked=="True"?1:0;
if(this.responseDetails[0].DocumentTypeDetails.Amend.Checked)
this.showAmend=this.responseDetails[0].DocumentTypeDetails.Amend.Checked=="True"?1:0;
if(this.responseDetails[0].DocumentTypeDetails.MortgageDeed.Checked)
this.showMortDeed=this.responseDetails[0].DocumentTypeDetails.MortgageDeed.Checked=="True"?1:0;
if(this.responseDetails[0].DocumentTypeDetails.MortgageRefi.Checked)
this.showMortRefi=this.responseDetails[0].DocumentTypeDetails.MortgageRefi.Checked=="True"?1:0;
if(this.responseDetails[0].DocumentTypeDetails.MortgageMod.Checked)
this.showMortMod=this.responseDetails[0].DocumentTypeDetails.MortgageMod.Checked=="True"?1:0;
if(this.responseDetails[0].DocumentTypeDetails.Assignment.Checked)
this.showAssign=this.responseDetails[0].DocumentTypeDetails.Assignment.Checked=="True"?1:0;
if(this.responseDetails[0].DocumentTypeDetails.ReleaseSatisfaction.Checked)
this.showRelSatisfaction=this.responseDetails[0].DocumentTypeDetails.ReleaseSatisfaction.Checked=="True"?1:0;
if(this.responseDetails[0].DocumentTypeDetails.poa.Checked)
this.showPOA=this.responseDetails[0].DocumentTypeDetails.poa.Checked=="True"?1:0;
}
JSON
"DocumentTypeDetails": {
"PageRec": "AL005",
"State": "AL",
"County": "Autauga County",
"CityTown": null,
"Zip": null,
"ShowRecordingInfo": "true",
"Deed": {
"Checked": "True",
"Pages": "1",
"ConsiderationAmount": "150000"
},
"MortgageDeed": {
"Checked": "False",
"Pages": null,
"NewDebtAmount": null
},
"MortgageRefi": {
"Checked": "False",
"Pages": null,
"NewDebtAmount": null,
"OriginalDebt": null,
"UnpaidDebt": null
},
"Assignment": {
"Checked": "False",
"Pages": null,
"Assignments": null
},
"ReleaseSatisfaction": {
"Checked": "False",
"Pages": null,
"ReleasesSatisfactions": null
}
}
在JSON文件中,我们没有该用户的所有数据,但是对于另一个,可能存在一些丢失的数据。是否有任何检查?
更多到打字稿文件
private responseUrl='http://localhost:58682/home/index1';
getresponseDetails(){
return this.http.get(this.responseUrl).map(res=>res.json());
}
LoadResponseData(){
this.service.getresponseDetails()
.subscribe(data=>{
this.responseDetails=data;
}
错误
ERROR TypeError: Cannot read property 'Checked' of undefined
at CalculatePage.displayData (calculate.ts:186)
at CalculatePage.ngOnInit1 (calculate.ts:111)
at SafeSubscriber._next (calculate.ts:93)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:234)
at SafeSubscriber.next (Subscriber.js:183)
at Subscriber._next (Subscriber.js:125)
at Subscriber.next (Subscriber.js:89)
at MapSubscriber._next (map.js:83)
at MapSubscriber.Subscriber.next (Subscriber.js:89)
at XMLHttpRequest.onLoad (http.es5.js:1205)
答案 0 :(得分:0)
为什么不在接收时检查您要查找的节点是否在响应中?
我在考虑这样的事情:
makeGetRequest() {
this.http.get("https://api.mywebsite.com/users/1454")
.subscribe(response => {
let resJson = JSON.parse(response);
if (resJson['Amend'] === undefined) {
Observable.throw('no Amend node in received response');
}
this.responseDetails = resJson;
}, error => {
console.log('oops!');
});
}