求助人:小九
逻辑错误
2023年11月06日 16点48分

填写验证码后,点击发送短信按钮会刷新验证码

填写验证码后,点击发送短信按钮会刷新验证码
关键字: 前端 C# Javascript ajax
  • 悬赏了: 帮帮币 30 枚
  • 半糖人类 处理中……
  • 学习中遇到的问题, 需要保密允许公共编辑
  • 演示/调试环境:分享桌面
  • 期望完成时间: 2023年11月07日 16点40分
协助进程

已支付
2023年11月06日 16点50分 邀请了帮主小薇
2023年11月06日 16点52分 帮主小薇接受了邀请,接头暗号已发送
2023年11月06日 17点14分 协助未能由帮主小薇完成
2023年11月06日 17点32分 帮主半糖人类发送我能帮忙的消息……
2023年11月06日 17点32分 帮主半糖人类发送我能帮忙的消息……
2023年11月06日 17点32分 邀请了帮主半糖人类
2023年11月06日 17点33分 帮主半糖人类接受了邀请,接头暗号已发送
2023年11月06日 17点59分 协助由帮主半糖人类成功完成
2023年11月07日 09点08分 做出评价,并将悬赏支付给帮主半糖人类
求助人评价:
解决方案
2023年11月06日 18点19分
作者 半糖人类

原始方案:ajax中在complete统一进行了验证码刷新的调用,此时不管验证码是正确或者错误,都会进行刷新
修改方案:在success阶段判断验证码接口的返回信息,如果存在错误,则手动进行验证码刷新+清空验证码输入框+聚焦输入框


但目前的方案仍然有优化的空间,可以参考以下的最佳实践:

  • 在前端页面中添加一个验证码刷新按钮,用户可以点击按钮手动刷新验证码;
  • 在ajax请求发送前,判断验证码输入框中是否有值,如果没有,提示用户必须输入验证码;
  • 在success阶段判断验证码接口的返回信息,如果存在错误,则手动进行验证码刷新+清空验证码输入框+聚焦输入框;
  • 在complete阶段判断服务器返回的状态码,如果是401(未授权),则说明验证码错误,手动进行验证码刷新+清空验证码输入框+聚焦输入框;
  • 以下是基于jquery的代码示例:

    // 刷新验证码
    function refreshCaptcha() {
        // 发送刷新验证码的请求
        $.ajax({
            url: '/captcha/refresh',
            type: 'get',
            dataType: 'json',
            success: function (data) {
                // 将新的验证码图片设置到页面上
                $('#captcha-img').attr('src', data.img);
                // 将新的验证码的id设置到隐藏域中
                $('#captcha-id').val(data.captcha_id);
                // 清空验证码输入框
                $('#captcha-input').val('');
                // 聚焦到验证码输入框
                $('#captcha-input').focus();
            },
            error: function () {
                alert('刷新验证码失败,请重试!');
            }
        });
    }
    
    // 发送手机验证码请求
    function send() {
        // 获取手机号
        var phone = $('#phone-input').val();
        var captcha = $('#captcha-input').val();
        var captcha_id = $('#captcha-id').val();
        // 判断验证码输入框是否有值
        if (!captcha) {
            alert('请输入验证码!');
            return;
        }
        // 发送登录请求
        $.ajax({
            url: '/phone-send-code',
            type: 'post',
            dataType: 'json',
            data: {
                phone: phone,
                captcha: captcha,
                captcha_id: captcha_id
            },
            success: function (data) {
                // 处理登录成功的逻辑
            },
            error: function (xhr) {
                // 判断服务器返回的状态码
                if (xhr.status === 401) {
                    // 验证码错误,手动刷新验证码
                    refreshCaptcha();
                    // 清空验证码输入框
                    $('#captcha-input').val('');
                    // 聚焦到验证码输入框
                    $('#captcha-input').focus();
                } else {
                    alert('登录失败,请重试!');
                }
            }
        });
    }
    
    // 绑定刷新验证码按钮的点击事件
    $('#captcha-refresh-btn').click(function () {
        refreshCaptcha();
    });
    
    // 绑定发送按钮的点击事件
    $('#send-btn').click(function () {
        send();
    });
    



    0 0 演示用,功能实现中……
    上一个 下一个
    @TA
    回复
    11月20日 17点59分 寒夜郎君
    @TA回复 这句话留个蓝色@就行了,别整太复杂
    @TA
    回复
    11月20日 18点00分 寒夜郎君
    或者弄个图标
    @TA
    回复
    11月20日 18点12分 半糖人类
    飞哥这个聊天加个分页吧,如果请求last=1,就会一下请求全部的页面数据,对服务器压力有点大
    @TA
    回复
    11月20日 19点49分 叶飞
    分了页的
    @TA
    回复
    11月22日 09点52分 nottyjay
    111
    @TA
    回复
    11月22日 09点54分 叶飞
    咦?
    @TA
    回复
    11月22日 09点54分 叶飞
    又一个bug,回复功能失效
    @TA
    回复
    11月22日 10点16分 小薇
    太棒了,能和大佬们在线交流了
    @TA
    回复
    11月22日 10点21分 小薇
    飞哥能不能将这个在线聊天用WebSocket协议改一下,直接服务端推送消息,不用客户端主动请求
    @TA
    回复
    11月22日 10点25分 小薇
    叶飞
    又一个bug,回复功能失效...
    试试回复功能

    有新消息,知道了