Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获类型错误:无法读取属性';地图';AJAX对象上未定义的_Javascript_Jquery_Pnp Js - Fatal编程技术网

Javascript 未捕获类型错误:无法读取属性';地图';AJAX对象上未定义的

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” }, 成功:功能成功

如果没有结果,是否有一种方法可以将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”
},
成功:功能成功(数据){
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"