V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lisisi
V2EX  ›  问与答

ajax 传值 JSON.stringify() 后,把 null 变成了 'null',这是默认转换的吗?

  •  
  •   lisisi · 2021-03-23 22:11:13 +08:00 · 1367 次点击
    这是一个创建于 1359 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在前端传 foo 到后端,如果 obj.value 是空字符串,就把 null 传到后端:

    const foo = obj.value || null
    ...
    s = { foo: foo; }
    data = JSON.stringify(s)
    ...
    

    结果在后端收到是字符串 'null',这是 ajax 默认转换的吗?

    7 条回复    2021-03-24 08:21:51 +08:00
    opengps
        1
    opengps  
       2021-03-23 23:06:16 +08:00 via Android
    不是太懂前端,试探性回复下:这是你传入了值
    opengps
        2
    opengps  
       2021-03-23 23:07:45 +08:00 via Android
    后端想要收到的值为 null,需要前端传递时候没有这个参数,或者声明入参类时候支持 null 才可以
    des
        3
    des  
       2021-03-23 23:15:09 +08:00 via iPhone   ❤️ 1
    不是,说明你代码有问题
    AllenHua
        4
    AllenHua  
       2021-03-23 23:23:26 +08:00
    如果 obj.value 是空字符串,就把 null 传到后端

    `const foo = obj.value || null` 这一句里,如果 obj.value 是空字符串,那么会把空字符串给 foo 吧。

    如果 obj 没有 value 属性,才会执行 || null, 会把 null 赋值给 foo

    至于 后端收到字符串 null

    你打印一下 obj 对象看看呢 `console.log('obj', obj)`
    Vegetable
        5
    Vegetable  
       2021-03-24 01:57:26 +08:00
    你 stringfy 之后,data 只是字符串,不管你用什么方法传给后端,后端收到的都是字符串,没有哪个框架或者工具会把 null 改成字符串。如果他解析出了 null,只能证明他解析的方法有问题。JSON 是支持 null 的,字符串应该是`{"foo":null}`这样的。如果想排除你自己的问题,直接 network 看一下发出去的 body 就好了
    IvanLi127
        6
    IvanLi127  
       2021-03-24 08:06:33 +08:00 via Android
    应该是后端的问题,你在前端再把 s 解析回 json 对象看看
    renmu123
        7
    renmu123  
       2021-03-24 08:21:51 +08:00 via Android
    首先 json 只有 null 值等的
    js 对象中如果有 null 值,json.stringify()是会进行转换的,undefined 是不会转换的。
    我不知道 java 有没有所谓的空值(大概率是有的)
    大概率是 json 解析器的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:50 · PVG 21:50 · LAX 05:50 · JFK 08:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.