如何使用两个变量创建JSON键值对并解决AJAX传参pid未定义问题
问题结论
你当前的写法存在错误,问题的核心是 sessionStorage 仅支持存储字符串类型数据,直接存入JavaScript对象会被隐式转换为[object Object]格式的字符串,取出后自然无法读取pid属性。
错误原因
- sessionStorage的存储规则限制所有值必须为字符串,你直接存入
userData对象时,JS会自动调用对象的toString()方法,最终存储的内容为无实际数据的"[object Object]"字符串 - 取出该字符串后直接访问
.pid属性,就会抛出未定义的报错
解决方法
存储和读取时分别做序列化、反序列化处理即可:
存储阶段
使用JSON.stringify()将对象转为JSON字符串后再存入sessionStorage:
var a = result.master_id; var b = result.session_name; var userData = {'pid':a,'session' :b}; // 序列化后存储 sessionStorage.setItem('userData', JSON.stringify(userData));
读取阶段
使用JSON.parse()将取出的字符串还原为原始对象,再读取属性使用:
// 取出后反序列化为对象 var storedUserData = JSON.parse(sessionStorage.getItem('userData')); // 可正常读取pid属性 console.log(storedUserData.pid); // 之后正常传给AJAX即可
可选兼容处理
如果存在存储内容为空的场景,可以加兜底判断避免JSON.parse报错:
var storedStr = sessionStorage.getItem('userData'); var userData = storedStr ? JSON.parse(storedStr) : {};
内容的提问来源于stack exchange,提问作者fungusblacky
相关产品推荐
相关产品推荐

