随笔
这篇文章记录下课程设计遇到的问题
首先是在用ajax的时候遇到的问题
以前用ajax的时候,是在输入框失去焦点的时候就执行的,比如输入邮箱后,验证输入的邮箱是否已经存在,如果存在就在页面上显示存在,但是我感觉这样还是存在一个问题,就算提示了邮箱已经存在,但是如果无视提示,还是去点击提交的话,这个时候做不做判断呢?如果还是做一次判断那么就重复判断了,为什么不在提交的时候在判断输入,验证通过再提交表单,否则就阻止表单提交。
我这次就是这样做的,在点击提交的时候进行验证,除了对格式的验证外还有ajax对输入的邮箱进行判断是否存在
首先出的问题是ajax的回调函数根本就没运行,但是后台却接受到了那个验证的请求,后来我就进行调试,发现情况确实是这样的,得到了数据,触发后台的action,但是没执行回调函数
因为没执行回调函数,所以那段验证代码就被跳过了,所以验证通过,执行了表单的提交操作,
在断点调试的时候看日志没有任何问题,但是我没调试的时候,再看日志发现了个奇怪的显示,
后台有两个action被调用了,这是正确的,但是第一个action的日志没打印完,也就是说这个action没执行完下个action就来了,再后来有一次一个特殊的情况,回调函数突然执行了一次,但是只有一次,之后的几次测试还是刚开始的情况
我刚开始以为是自己后台的代码出问题了,但是看了下代码,发现里面没有可能抛异常的情况,再经过几次断点调试后,突然想到了一个问题
ajax Asynchronous Javascript And XML
第一个A 就是代表着异步,我突然意识到这个问题了,之前再用ajax的时候根本就没有想到这个问题,我用ajax一般就是认为不跳转页面在原页面上修改,
但是ajax是一个异步操作,也就是说,它向后台发起了一个请求,但是不会停止动作来等待这个返回结果,当有结果返回的时候才会触发回调函数,这就解释后台两个action其中前一个只执行了一半的情况了,然后我就查找ajax能不能同步调用,发现确实可以 加上async:false 就可以了,这个修改后一切都没问题了
说了这么多 总结起来就一点,我注意到了ajax的异步调用特性了,之前一直没注意
第二个就是spring boots redis 的使用
在pom中添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
然后在配置类中配置redis
@Bean public JedisConnectionFactory jedisConnFactory() { JedisConnectionFactory factory = new JedisConnectionFactory(); factory.setPassword("luolei"); return factory; } @Bean public RedisTemplate redisTemplate() { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(jedisConnFactory()); return template; }
使用的时候用注解注入就可以了
@Resource private RedisTemplate<String,User> redisTemplate;