javascript - 每次用户输入用户名时发送 Ajax 请求以检查用户名的可用性。这种方法有什么缺点?
问题描述
我正在制作一个 NodeJS 身份验证应用程序。
情况:用户输入用户名,如果用户名被占用,它将显示“用户名被占用”,否则它将显示“用户名可用”
我想知道我在下面实现的方法的缺点:
用户名输入栏
<input type="text" name="userName" placeholder="Username" required="" onkeyup="checkUsername(this.value)">
所以每次用户输入一个字母时,都会调用 checkUsername() 函数!
检查用户名函数
function checkUsername(data){
$( document ).ready(function(){
$.ajax({
url: '/register/checkUsername',
method: 'POST',
contentType: 'application/json',
data: JSON.stringify({user_name:data}),
success: function(new_data) {
if(new_data == 'available'){
//By Default the messages are hidden!
document.getElementsByClassName('user-name-taken')[0].style.display = 'none'
document.getElementsByClassName('user-name-available')[0].style.display = 'block'
} else {
document.getElementsByClassName('user-name-available')[0].style.display = 'none'
document.getElementsByClassName('user-name-taken')[0].style.display = 'block'
}
}
})
})
}
'/register/checkUsername' 路由器
async (req,res)=>{
var username = await userModel.findOne({userName:req.body.user_name})
if(!username) {
res.send('available')
} else {
res.send('none')
}
}
这会使网络应用程序变慢吗?还有其他缺点吗?
解决方案
当前的方法不是最好的,当您从性能的角度进行讨论时,或者当您考虑扩展时,API 命中的数量会呈指数级增长(它适用于较小规模的项目)。
PS:虽然从用户体验的角度来看,这很棒。
更好的方法1
完成输入后,提供一个按钮以检查用户名的可用性。
PS:不是最好的用户体验。
更好的方法2
为了实现两全其美,您可以等待用户输入最少字符数(可能是 4 或 5 个),然后在输入的每个字符上开始调用 API,因为用户名不会少于 4 -5 个字符并以该长度检查不是一个好主意。除此之外,它也很有意义并且提供了出色的用户体验。
最后,可以有很多其他的方法来解决它,这是根据我的观点。随时发表评论并为其添加更多积分。
推荐阅读
- excel - 使用 VBA 将打印区域的位置从一个文件复制到另一个文件
- scala - Gatling 请求正文为字节数组
- c# - 是否可以使用#if DEBUG 常量在 Xamarin.Forms 中以调试模式执行代码?
- java - 无法弄清楚为什么我在 EditText 上得到这个 NullPointerException
- python-3.x - 试图根据某个字符串值查找列表的索引。index() 似乎没有起到作用
- r - R中的双积分实现
- javascript - 当对象值与其他对象相同时如何覆盖特定值
- symfony4 - 为什么要安装 symfony 版本 4?
- powershell - 使用 Powershell 使用 get-aduser 来获取没有标题信息的部门属性的值
- android - UnifiedNativeAd 的号召性用语按钮在 RecyclerView 内不起作用