sessionStorage存JSON字符串调用AJAX后端收到{'object Object':''}如何解决
问题根因
- 你通过AJAX提交
apiValue时,传递的是已经序列化好的JSON字符串,但没有显式指定请求头的Content-Type为JSON格式。jQuery默认会将传入的字符串按照application/x-www-form-urlencoded格式处理,会自动把字符串尝试转为表单键值对,最终导致整个JSON对象被toString为[object Object]作为键,值为空,后端就收到了{ 'object Object': '' }的异常数据。 - 额外注意:你当前在
forEach循环中反复覆盖sessionStorage里的user字段,最终只会存储最后一条循环数据,如果业务需要存储所有行的用户数据,需要先把所有数据存入数组再统一序列化存储。
解决方法
两种方案二选一即可:
方案1:保留传JSON字符串的逻辑,添加请求头配置
修改graphApi中的AJAX请求,显式指定Content-Type为JSON:
function graphApi(){ const apiValue = sessionStorage.getItem('user'); console.log(apiValue,"apivalue new") $.ajax({ type: "POST", data: apiValue, contentType: "application/json; charset=utf-8", // 新增这行配置 url: "http://localhost:5000/file", success: function (data) { console.log(data) }, error: function(err){ alert(err); } }) }
注意:后端需要提前配置好JSON格式的请求体解析中间件(比如Express的express.json()),才能正常解析该格式的请求。
方案2:把存储的JSON字符串转回对象再提交
不需要修改请求头,jQuery会自动将对象转为标准表单格式,后端可直接解析:
function graphApi(){ // 取出存储的JSON字符串后先反序列化为对象 const apiValue = JSON.parse(sessionStorage.getItem('user')); console.log(apiValue,"apivalue new") $.ajax({ type: "POST", data: apiValue, // 直接传对象即可 url: "http://localhost:5000/file", success: function (data) { console.log(data) }, error: function(err){ alert(err); } }) }
内容的提问来源于stack exchange,提问作者fungusblacky
相关产品推荐
相关产品推荐

