### 包含ajks的函数请求return为undifine####

项目场景:

#### 原代码状态:

------------------------------------------

输入框:

使用到的change函数:

使用到的nameChangePrompt函数:

    function nameChangePromptJudge(){
        alert("nameJudge")
        //校验姓名
        var empName = $("#emp_name_input").val()
        var regName = /(^[a-zA-Z0-9_-]{3,16}$)|(^[\u2E80-\u9FFF]{2,8}$)/ //匹配2-8位中文, 或3-16字母下划线数字
    
            //Ajax再校验姓名是否存在
            $.ajax({
                type: "GET",
                async:"false",
                url: "http://localhost:8080/ssm/checkEmpName",
                data: $("#emp_name_input").serialize(),
                dateType: "json",
                success: function (result) {
                    if (regName.test(empName)) { //姓名格式正确
                        if (result.errorCode == "00000") {
                            return true
                        } else {
                            return false
                        }
                    } else { //姓名格式错误
                        return false;
                    }
                }
            })
    
    }

前端页面的展示:


问题描述

nameChangePrompt()函数返回值为undifine与预想的true或者false不同 

原因分析:

1.ajks为异步请求,当运行到nameChangePromptJudge函数时,在发送ajks请求时会同时运行后面的内容,ajks还没结束时该函数就直接return,导致return undifine的出现

2.ajks类似于后端的匿名函数,回调函数中的return并非nameChangePromptJudge函数的结束,而是ajks回调函数的结束


解决方案:

1.将ajks异步请求转变为同步请求

在ajks请求中添加async: false

2.设置一个变量flag用于接收ajks回调函数中的判断值,并在nameChangePromptJudge函数中对flag函数判断决定返回true||false

 修改后的代码:

nameChangePromptJudge函数

function nameChangePromptJudge(){
        //校验姓名
        var empName = $("#emp_name_input").val()
        var regName = /(^[a-zA-Z0-9_-]{3,16}$)|(^[\u2E80-\u9FFF]{2,8}$)/ //匹配2-8位中文, 或3-16字母下划线数字
        var flag = 0
        if (regName.test(empName)) { //姓名格式正确
            //Ajax再校验姓名是否存在
            $.ajax({
                type: "GET",
                url: "http://localhost:8080/ssm/checkEmpName",
                data: $("#emp_name_input").serialize(),
                dateType: "json",
                async: false,
                success: function (result) {
                    if (result.errorCode == "00000") {
                        flag = 1;
                        return flag
                    }
                }
            })
        } else { //姓名格式错误
            return false;
        }
        if (flag==1){
            return true
        }else return false
    }
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值