今天篇头不废话了,交流加群:164858883

  在我们接收后端返回的json数据的时候,在数据缺失的时候,如果直接接收会导致致命错误的发生。可能有些同学会说通常都会有,不用判断直接获取也行。之前我也是这么想的,但从用了node + mongodb之后,发现数据库有些数据项没有的时候,前端报错了。后果就是页面完全失去了响应。比如我们要取一个这样的数据 :

$.get(url, function(data){

var dd = data.aa.bb.cc.dd;//aa或bb或cc不存在时,此处会导致致命错误,导致一下代码无法执行

});

在coffee中,dd = data?.aa?.bb?.cc?.dd这样可以解决,生成的js代码是这样的:

var _ref, _ref1;

if (typeof aa !== "undefined" && aa !== null) {
if ((_ref = aa.bb) != null) {
if ((_ref1 = _ref.cc) != null) {
_ref1.dd;
}
}
}

就是一层一层判断,在原生js如果这样写特别麻烦,所以我进行了一次封装,欢迎吐槽。

 /**by Steven
* 用于接收多层json数据,在没有属性的情况下不产生Cannot read property 'xxx' of null
* @param jsonArray 传入的数据数组[目标对象,'第一层属性名','第二层属性名'....]
* @param dftVal 当没有找到时返回的默认值
*/
getJsonAttr: function (jsonArray, dftVal) {
//非数组,直接返回,只有数据本身返回,保证数组最少有2个元素
if (dftVal == null) {
dftVal = ''
}
if (jsonArray == null) {
return dftVal
}
if (jsonArray.constructor != Array) {
return jsonArray
}
if (jsonArray.length == 1) {
return jsonArray[0];
}
var temp = jsonArray[0];
var returnVal = null;
//确保传入的第一个值合法
if (!!temp) {
for (i = 1; i < jsonArray.length; i++) {
var key = jsonArray[i];
if (!!temp[key]) {
temp = temp[key];
returnVal = temp;
} else {
returnVal = dftVal;
//键值未找到,中断执行
break;
}
}
}else{
returnVal = dftVal;
}
return returnVal;
}

  

这篇居然被踢出了博客园首页,真是伤心,他们说介绍的篇幅太少了。好吧,后来我在使用的时候,发现我忘了去判断传入的第一个参数[obj,'param'......]的obj进行判断,如果obj为null或者为undefined的时候,下面的执行会出错。所以改进了下。额,我我发现我改了下代码块的字体大小,然后,就在代码块前加了个span标签。。。。。,这是博客园的bug。不影响阅读。

原创作品,转载请注明出处:http://zhutty.cnblogs.com  加q群:164858883

[原创作品] 对获取多层json值的封装的更多相关文章

  1. Jquery表单提交后获取返回Json值

    1.给form添加id值: <form action="/News/SaveMessage" method="post" accept-charset=& ...

  2. JS 根据Url参数名称来获取对应的值 方法封装

    function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  3. Python 获取MD5加密值

    Python 获取MD5加密值方法封装 import hashlib def get_md5(s): """获取MD5加密值 :param s: 需要加密的字符串 :re ...

  4. asp 获取url 返回值 和 对json 返回值的处理

    Function GetHttpPage(HttpUrl,endoce) If endoce = "" Then endoce = "GB2312" If Is ...

  5. C# 获取Newtonsoft.Json的JObject多层节点内容

    json形如 { "object":{ "name":"cwr" }, " } 要获取name的值,则需要构造两个JObject来 ...

  6. C#:Json数据反序列化为Dictionary并根据关键字获取指定的值

    转自曾是土木人原文 C#:Json数据反序列化为Dictionary并根据关键字获取指定的值 Json数据: { "dataSet": { "header": ...

  7. Jmeter 通过json Extracted 来获取 指定的值的id

    在没有 精确或模糊查询的接口时可以使用jmeter 获取指定的值的ID import java.lang.String ; String getTargetName="iphone632g& ...

  8. (原创)【MAUI】在窗口(页面)关闭后获取其返回值

    一.前言 作为一名 Winform 和 WPF 的老用户,没想到 MAUI 上变化那么大. 就像传统的窗口,我弹出一个模式窗口,关闭窗口后是可以获取到窗口的返回值的,即: DialogResult.后 ...

  9. [原创作品] javascript 实现的web分页器原理

    很久没有写博客了,因为最近忙于一些杂七杂八的事情.不过,互联网的价值在于信息共享,因为共享,所以互联网才能飞快发展.博主建了一个技术共享qq群:164858883,因为目前人数还比较少,活跃度还不是很 ...

随机推荐

  1. Annotation注解

    概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法,可用于修饰包.类. ...

  2. 修改登录linux之后显示的默认文件夹目录

    命令如下: ll -a vim .bash_profile 最后一行加上cd 需要显示的文件夹

  3. https加密

    对称加密  客户端和服务器使用同一把钥匙,加密算法公开 非对称加密  不同钥匙,公钥加密的私钥可以打开 私钥加密的公钥可以打开 HTTPS关键: 1. 要传输的业务数据,使用对称加密. 客户端生成私钥 ...

  4. 使用 HTTP 缓存机制提升系统性能

    摘要 HTTP缓存机制定义在HTTP协议标准中,被现代浏览器广泛支持,同时也是一个用于提升基于Web的系统性能的广泛使用的工具.本文讨论如何使用HTTP缓存机制提升基于Web的系统,以及如何避免误用. ...

  5. js获取对象位置的方法

    scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最 ...

  6. WebSQL实例记录

    <table id="content"> </table> <br> <input type="button" id= ...

  7. python3中文字符编码问题

    最近在进行网络爬虫时,被中文的编码问题搞得很头疼,特别是在windows环境下. 1.爬取到的中文网页内容,在解析时出现解析错误 一般情况下,我们都是用urllib中的相关函数,进行web页面的爬取, ...

  8. 导入表 IMPORT_DESCRIPTOR

    typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null i ...

  9. UCOS 请求任务删除函数 及其应用

    有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失.在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己.用户 ...

  10. Application.Count.ToString()和Application["count"].ToString()的区别

    当属性名中包括特殊字符如 “.”或“-”就不能使用“.”操作符了.操作符只能使用[ ]操作符 为了统计网站的在线人数,我们可以在Global.asa文件中包含如下代码: <SCRIPT LANG ...