ajax请求验证登录名是否已注册

来源:互联网 发布:怎么登录阿里云邮箱 编辑:程序博客网 时间:2024/05/31 19:27

问题提出:利用ajax请求来验证注册时选择的登录名是否已经被注册,问题是每次都会出现未注册,即使是数据库中已经存在有此登录名。

 

后台程序:

@RequestMapping(value = "duplicate", method = RequestMethod.GET,            consumes = MediaType.APPLICATION_JSON_VALUE)    @ResponseBody    public ResponseEntity<Object> duplicate(@RequestParam(value = "loginName")                             String loginName) {        try {            UserDto userDto = developerService.findByLoginName(loginName);            if (userDto == null) {                userDto = new UserDto();                userDto.setLoginName(loginName);                return new ResponseEntity(userDto, HttpStatus.OK);            } else {                return new ResponseEntity(userDto, HttpStatus.OK);            }        } catch (CoreException e) {            logger.error(e.getMessage());            e.printStackTrace();            return new ResponseEntity(null, HttpStatus.INTERNAL_SERVER_ERROR);        }    }

 

后台请求接口:

 

url: "${ctx}/developer/duplicate",

 

约定格式:application/json

 

 

传输数据:

 

data: {"loginName": loginName},

 

 

 

验证登录名是否合法:

        合法才提交请求验证登录名是否已注册,否则登录名不合法不能请求服务。

 

function checkLoginName(loginName){        if(......){         .........         return false;         }else if(duplicate(loginName)==true){         ..........         return false;         }else{          .......          return true;         }}

           当请求到检验是否重名的函数duplicate(loginName)时:

 

 

function duplicateLoginName(loginName) {            var dup = false;            $.ajax({                type: "GET",                url: "${ctx}/developer/duplicate",                contentType: "application/json",                dataType: "json",                data: {"loginName": loginName},                beforeSend: function () {                    $("#loginNameTips").text("正在验证...").css("color", "red");                },                error: function (data, XMLHttpRequest) {                    $("#loginNameTips").text("×验证失败:").css("color", "red");                },                success: function (data) {                    if (data.id == null)                        dup = false;//未重名                    else                        dup = true;//重名                }            });            return dup;        }

理想结果:若重名,则该函数返回false,否则返回true

 

实际结果:如果重名,会执行dup=true,不重名,执行dup=false,但是返回的dup始终是初始化的值false,结果是无论重名与否,结果都显示不重名,为什么呢?

 

原因分析:ajax默认是异步传输,也就是说,方法并没有等待 success:function(data) 回调函数执行完,就已经向下执行了。这就是dup一直未初始化值false的原因所在。

 

解决办法:利用同步传输,添加上async:false即可,

 

 

0 0
原创粉丝点击