1:后台返回null值,前端请求要求json数据时不执行回调函数,及ajax请求报错JSON.parse: unexpected end of data。2:前端响应为json格式,但输出字符串对象。

前端请求要求以json格式,且后台返回null值时,不执行回调函数,及ajax请求报错JSON.parse: unexpected end of data。

1. 问题描述

最近遇到这个奇怪的问题🙃:就是post请求与get请求成功,状态200,但当后台返回值为Null时,却不执行回调函数。

2. 出错与错误描述:

  1. 请求代码:
$.post("menber/checkLogin",null,function(data){
	console.log("mb: " + data);
	if(data==null || data==''){
		sessionStorage.removeItem("currentUser");
	}else{
		$("#loginBtn").hide();
		$("#loginInfo").show().find("em").html(data.nickName);
	}
},'json');
  1. 我改成发ajax请求之后,发现报错了。
$.ajax({
	 url : 'menber/checkLogin'
	,dataType : 'json'
	,success : function(data,status){
		console.log("mb: " + data);
		if(data==null || data==''){
			sessionStorage.removeItem("currentUser");
		}else{
			$("#loginBtn").hide();
			$("#loginInfo").show().find("em").html(data.nickName);
		}
	}
	,error : function(data,stauts,e){
		console.log("dt: "+JSON.stringify(data));
		console.error("检查登录校验失败:" + e);
	}
});
  1. 前端错误信息:
    SyntaxError: "JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

  2. 后端控制器

@RequestMapping("checkLogin")
public MenberInfo checkLogin(HttpSession session){
	Object obj = session.getAttribute("currentLoginUser");
	System.out.println(obj);
	if( obj != null ){
		return (MenberInfo) obj;
	}
	return null;
}

3.错误原因:

原因是要求返回json格式的数据时,会执行JSON.parse(data); 。
但当返回值为null时,前端的数据为字符串空(如下图示),当JSON.parse(’’)时,会报刚刚的错误一样。
在这里插入图片描述
JSON.parse(null); 后面的参数可以是null,但不可以是’’。所以使用console.log(JSON.stringify(data)); 可以发现响应的结果就是一个空字符串。所以在转json的时候会报错。
在这里插入图片描述
所以可以在接收时要求为文本值(即把dataType删掉或改为text),先进行判空处理,在转成json格式即可。

前端响应为json格式,但输出却总是为 [object Object]

最近在写代码,后台返回json格式,但前端输出却总是为 [object Object] 这个字符串。原因是在上边使用了 data = $.trim(data); 。把这段代码去除就OK了哦!

附:json格式转换

  1. 转json字符串:JSON.stringify();
  2. 转json对象:JSON.parse()
posted @   Huathy  阅读(41)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示