抱歉这个愚蠢的问题,但对于我的生活,我无法得到正确的和一点菜鸟。我得到一个前端javascript错误:
TypeError:无法读取属性'数据'未定义的
我的代码:
var getApiPipe = services.pipecall(_this.getPackage).success(function (data) {
if (data.response[0].data.length > 0) {
_this.buyerObjectResponse = data.response[0].data;
} else {
_this.noDataBuyer = true;
}
_thisRoot.loading = false;
});
从服务器返回的JSON返回:
{
"status":true,
"response":[
{
"data":[
{
"ID":1,
"auctionid":4,
"sessionname":"Session 1",
"created":"2017-09-25 10:13:57"
}
]
}
]
}
请帮助:(
答案 0 :(得分:1)
首先,请确保您已收到您期望的回复类型!
之后,当查看可能未定义的嵌套属性时,您可以做一些事情,但大多数人最容易理解的是Duck Casing
:
if(
data &&
data.response &&
data.response.length &&
data.response[0].data &&
data.response[0].data.length
) {
//do positive match here
} else {
//no data
}
通过检查什么是积极匹配的每一部分,你可以确保只有每一件都在那里才会前进。
稍微慢一些,更通用的可能性就是使用像你这样的path
函数在许多库中找到。 Ramda有很好的实现,但如果你不想使用Ramda,那就有一个vanilla版本:
function path ( paths, object ) { // will traverse the path, and if prop is found, returns it.
for(var i = 0, l = paths.length, intermediate = true; i < l && intermediate; i++){
intermediate = object[paths[i]];
}
return intermediate !== undefined? intermediate : null;
}
此函数将接受prop
中任何相关Object
的内容,包括数组索引的数字。