原始方案: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();
});