【问题标题】:Sending Ajax Request each time when user types username to check username availability. What drawbacks are there to this approach?每次用户输入用户名时发送 Ajax 请求以检查用户名的可用性。这种方法有什么缺点?
【发布时间】:2021-09-24 16:01:33
【问题描述】:

我正在制作一个 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')
        }

    }

这会使网络应用程序变慢吗?还有其他缺点吗?

【问题讨论】:

  • 我已经修改了你的问题,所以它更多地是关于事实而不是关于意见。如果您想对代码进行更多审查(按原样运行),您可能需要查看help center 以查看您的问题是否与Code Review 的主题有关。

标签: javascript node.js ajax express mongoose


【解决方案1】:

当前的方法不是最好的,当您从性能的角度进行讨论时,或者当您考虑扩展时,API 命中的数量会呈指数级增长(它适用于较小规模的项目)。

PS:虽然从用户体验的角度来看,这很棒。

更好的方法1

在输入完成后提供一个按钮来检查用户名的可用性。

PS:不是最好的用户体验。

更好的方法2

为了实现两全其美,您可以等到用户输入最少字符数(可能是 4 或 5 个),然后在输入的每个字符上开始调用 API,因为用户名不会少于 4-5 个字符并且以该长度检查不是一个好主意。除此之外,它还很有意义,并且还提供了出色的用户体验。

最后,可能还有很多其他的方法可以解决,这是根据我的观点。随时发表评论并为其添加更多积分。

【讨论】:

  • 太棒了。使用 onfocusout=checkUsername() 怎么样。我认为这会减少很多ajax请求!
  • 是的,您可以使用onBlur事件监听器,但用户需要再次从用户名输入框来回切换到另一个,以检查用户名的有效性。我认为这不会是一个很好的用户体验,并且会增加用户的点击次数。
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
相关资源
最近更新 更多