原始方案:ajax中在complete统一进行了验证码刷新的调用,此时不管验证码是正确或者错误,都会进行刷新
修改方案:在success阶段判断验证码接口的返回信息,如果存在错误,则手动进行验证码刷新+清空验证码输入框+聚焦输入框
但目前的方案仍然有优化的空间,可以参考以下的最佳实践:
以下是基于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(); });