拼接参数的问题

var params={};
 $.each(that.meetArrangeList, function(index1, val1) {
    $.each(val1.child, function(index2, val2) {
        $.each(val2.child, function(index3, val3) {
            ...
            params["arrange["+index1+"].id"]=val3.meetID;
            ...
        });
    });
});

meetID这个属性有的有有的没有,运行的时候浏览器也没有报错,使用POST方法提交,在浏览器ajax请求中找到form data下的参数发现没有meetID这个属性的那一条(图一第二条数据)没有拼接id参数,

clipboard.png

提交之前我把params打印出来,结果图一中的第二条数据拼接了id这个属性,值为undefined

clipboard.png

解决方法可以这样写:

params["arrange["+index1+"].id"]=val3.meetID || '';

但是不明白为什么打印出来的和浏览器传递的不一样呢?是因为一个是对象一个是字符串的区别吗?还是浏览器自动过滤掉了undefined的内容?

阅读 3.4k
2 个回答

浏览器说: 我该如何告诉后台, 这个值是 undefined 呢.

http 传参一般都会有 序列化和反序列化的过程 , 比如 普通的post请求 后台区分不了 参数是 字符串"5" 还是数字 5,序列化的时候 把这个特征去掉了.
undefined 本意就是未定义, 那序列化时忽略就很正常 , 比如 JSON 中就没有 undefined 确有 null .

因为你的 meetID 存在optional 的情况,但是他的父级 val3 任然是个对象 但是只不过你要取 meetID 他恰好没有 但是你又要取 浏览器只好返回给你一个 undefined 表示这个属性 meetID 是未定义的 在我这个对象就没有 ,但是 null 又不一样 null 表示 已经 defined 了 但是没有给值,当你在调用post请求时 数据以 json 对象的方式去传递 正如 @cnwhy 所说 json 是不存在 undefined 的。所以序列化时就已经丢弃了

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题