Javascript 未捕获类型错误:无法读取属性';地图';AJAX对象上未定义的
如果没有结果,是否有一种方法可以将N/a作为默认值传递?如果映射对象的标题为空,我希望能够将其定义为“N/A”Javascript 未捕获类型错误:无法读取属性';地图';AJAX对象上未定义的,javascript,jquery,pnp-js,Javascript,Jquery,Pnp Js,如果没有结果,是否有一种方法可以将N/a作为默认值传递?如果映射对象的标题为空,我希望能够将其定义为“N/A” Media\u x0020\u Specialist\u x0028\u s\u x.results下的一些项目返回,但是有些项目没有返回,我得到了那个错误 代码: $.ajax({ url:requestUri, 键入:“获取”, 数据类型:“json”, cache:false, 标题:{ 接受:“application/json;odata=verbose” }, 成功:功能成功
Media\u x0020\u Specialist\u x0028\u s\u x.results下的一些项目返回,但是有些项目没有返回,我得到了那个错误
代码:
$.ajax({
url:requestUri,
键入:“获取”,
数据类型:“json”,
cache:false,
标题:{
接受:“application/json;odata=verbose”
},
成功:功能成功(数据){
onSuccess(数据);
ExportTable();
}
});
函数onSuccess(数据){
var项目=数据d.结果;
对于(变量i=0;i
以下是错误:
您可以使用三元运算符并对每个项目重复此操作:
(item[i].Franchises_x0020_with_x0020_Shar.results ?
item[i].Franchises_x0020_with_x0020_Shar.results
.map(function(r) {
return r.Title;
})
.join("; ")
:
"N/A")
就我个人而言,我会用括号把它括起来,以便更清楚地说明发生了什么(如上所述)
或者,使用较新的javascript功能,您可以使用可选的链接,该链接是为了解决这个问题而创建的:
item[i].Franchises_x0020_with_x0020_Shar?.results
.map(({ Title }) => Title))
.join("; ")
|| "N/A"
进一步的建议:这里有很多重复的代码,使用+
在javascript中连接字符串的可读性不如使用
以下是一个更简洁、可读性更强的解决方案,可以对您可能拥有的其他数据进行重复:
$.ajax({
url:requestUri,
键入:“获取”,
数据类型:“json”,
cache:false,
标题:{
接受:“application/json;odata=verbose”
},
成功:功能成功(数据){
onSuccess(数据);
ExportTable();
}
});
//每当我们想要得到一个分号分隔的标题列表时,我们都会重用这个函数
功能名称(特许经营权){
var noResultsMessage='不适用';
//这个物体上有“结果”吗?它有长度吗?
var hasResults=!!特许经营权.results&!!特许经营权.results.length;
//仅当有结果要映射时才尝试映射
返回结果
?特许经营权.results.map(f=>f.Title).join(“;”)
:noResultsMessage;
}
函数onSuccess(数据){
var结果=数据d结果;
//映射结果,而不是使用for循环
var tableRows=results.map(结果=>{
//分解并重命名每个结果以获取子结果
变量{
特许经营权与共享,
独立的,独立的,
特许经营权(Liason):Liason,
媒体专家:专家
}=结果;
//从子对象获取标题
var sharedTitles=获取特许经营权(共享);
var Standalonetiles=获得特许经营权(独立);
var liasonTitles=获得特许经营权(liason);
var Specialistitles=获得特许经营权(专家);
//返回插入标题的此表行的标记
返回`
${sharedTitles}
${Standalonetiles}
${liasonTitles}
${specialistittles}
`
}).加入(“”);
//用外部表标记换行
var tableContent=`${tableRows}`;
//插入到元素中
$(“#标题”)。追加(表格内容);
}
JSON中的某些项没有结果
。效果非常好!谢谢@Dylan,我不知道我也能在像这样的物体上做到这一点。是的,三元组非常强大。但是,要小心,因为它们有时会绊倒您,因为这会隐式地检查javascript的真实值-最好执行项[i]。使用\u x0020\u Shar.results特许经营\u x0020\u!==未定义?额外的安全保证。
item[i].Franchises_x0020_with_x0020_Shar?.results
.map(({ Title }) => Title))
.join("; ")
|| "N/A"