分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

前台获取json未定义问题之两种常用解决办法

发布时间:2023-09-06 01:50责任编辑:郭大石关键词:jsjson

来自博客园的一位朋友解答:

为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被

当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式

(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对

象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和

结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:


alert(eval("{}"); // return undefined


alert(eval("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}();  做闭包操作时等。

注意:该例子使用的框架是spring+springmvc+mybatis plus

mybatis plus 是现有mybatis的增强版
官网为:http://mp.baomidou.com

这里有更为详细介绍

代码生成器可参考:人人开源 http://www.renren.io/

上述开源框架对于提高开发效率有很大的帮助

登录验证举例(成功例子):

/** * 登录js */$(function(){ ???$("#btn_login").click(function(){ ???????var mobile = $("#mobile").val(); ???????var password = $("#pwd").val(); ???????alert(mobile+"||"+password) ???????$.ajax({ ???????????url:"/LMS/user/Login", ???????????type:"POST", ???????????data : {"mobile":mobile,"password":password}, ???????????dataType : ‘json‘, ???????????success:function(data){ ???????????????var json = eval("("+data+")"); ????????????if(json.returnCode=="111111"){ ????????????????alert(json.returnMsg); ????????????}else if(json.returnCode=="222222"){ ????????????????alert(json.returnMsg); ????????????}else if(json.returnCode=="000000"){ ????????????????alert(json.returnMsg); ????????????}else{ ?????????????????????????????????alert("有异常,请和管理员联系"); ????????????} ???????????????},error:function(){ ???????????????alert("error"); ???????????} ???????}); ???????});});
@RestController@RequestMapping("/user")public class UserController { ???????private static Logger logger = Logger.getLogger(UserController.class); ???????@Autowired ???private UserService userService; ???????@Autowired ???private UserAuthsService userAuthsService; ???????@RequestMapping(value="/Login",method=RequestMethod.POST,produces="application/json;charset-utf8") ???@ResponseBody ???public String Login(String mobile,String password) { ??????logger.info("用户手机号:"+mobile); ??????logger.info("用户密码:"+password); ???????????????????EntityWrapper<UserEntity> wrapper = new EntityWrapper<UserEntity>(); ??????wrapper.eq("mobile", mobile); ??????UserEntity user = userService.selectOne(wrapper); ????????????????????EntityWrapper<UserAuthsEntity> wrapper2 = new EntityWrapper<UserAuthsEntity>(); ??????wrapper2.eq("identifier", user.getMobile()); ??????UserAuthsEntity userAuth = userAuthsService.selectOne(wrapper2); ?????????????logger.info("userEntity:"+user.getMobile()); ??????logger.info("userAuth:"+userAuth.getCredential()); ?????????????Map<String,Object> map = new HashMap<String,Object>(); ??????if(!userAuth.getIdentifier().equals(mobile)) { ??????????map.put("returnCode", "111111"); ??????????map.put("returnMsg","手机号有误"); ??????}else if(!userAuth.getCredential().equals(password)) { ??????????map.put("returnCode", "222222"); ??????????map.put("returnMsg","密码错误"); ??????}else { ??????????map.put("returnCode", "000000"); ??????????map.put("returnMsg","通过验证"); ??????????map.put("user", user); ??????????map.put("userAuth", userAuth); ??????} ?????????????return JSON.toJSONString(map); ???}}

失败例子:

/** * 登录js */$(function(){ ???$("#btn_login").click(function(){ ???????var mobile = $("#mobile").val(); ???????var password = $("#pwd").val(); ???????alert(mobile+"||"+password) ???????$.ajax({ ???????????url:"/LMS/user/Login", ???????????type:"POST", ???????????data : {"mobile":mobile,"password":password}, ???????????dataType : ‘json‘, ???????????success:function(data){ ????????????????????????????if(data.returnCode=="111111"){ ????????????????alert(data.returnMsg); ????????????}else if(data.returnCode=="222222"){ ????????????????alert(data.returnMsg); ????????????}else if(data.returnCode=="000000"){ ????????????????alert(data.returnMsg); ????????????}else{ ?????????????????????????????????alert("有异常,请和管理员联系"); ????????????} ???????????????},error:function(){ ???????????????alert("error"); ???????????} ???????}); ???????});});

两个例子进行对比,前者可成功返回json数据,而后者返回未定义

而当你将data.returnMsg或data.returnCode后面的returnMsg,returnCode去掉,直接alert(data) 是可以返回数据的

返回的数据直接是以json串(json字符串的形式{}),而并未将json进行格式化,所以直接取数据导致未定义

将json格式化有两种方法:

方式一:

一种是上述 var json = eval("("+data+")"); 称之为用eval解析

方式二:

var json = "{user:‘user‘}"

var obj = new Function("return"+json)//转换后的json对象

alert(obj.name);

alert(obj.age);

前台获取json未定义问题之两种常用解决办法

原文地址:https://www.cnblogs.com/youcong/p/8929009.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved