问题描述

在序列化参数传给后端接口时,出现很多null值,排查代码无解。进入断点调试后,问题出现在:

javascriptCopy code
  • 1
  • 2
  • 3
JSON.stringify({ test: $('#test').val() })
JSON.stringify({ test: $('#test').val() })

若val调用(或者.value属性)返回空串,在IE8下的转换结果将是:{"test":"null"}。但直接输出val()或value值,显示的均是空字符串。

定位到问题,再去网上搜索根源和解决方法,也是费了一番周折。所幸最终找到,确定这是IE8的一个Bug,手动擦汗……

问题解决

显式和空串拼接后再进行序列化:

javascriptCopy code
  • 1
  • 2
  • 3
JSON.stringify({ test: $('#test').val() + '' })
JSON.stringify({ test: $('#test').val() + '' })

或者,将json2.js中的JSON对象改名为JSON2等,并以此名称进行调用。

参考

  1. 帮倒忙的IE8 JSON.stringify()