你是否有遇到过服务器渲染(res.render)无效的情况呢?

15 篇文章 0 订阅
14 篇文章 0 订阅
最近在改进之前做的登录注册功能,最开始做的时候是用的form表单提交将用户输入的账号密码提交到服务端。
服务端根据数据处理完之后进行判断,如果在数据库中能够查询到对应的值,则会从登陆页面跳转到首页;如果在数据库中不能查询到对应的值,则依旧会停留在注册页面并提示错误信息。
此过程页面的跳转恰好用的是res.render的方式,搭配上ejs模板引擎实现了页面的渲染。
res.render('login',{msg:'登录失败!用户名或密码错误!',user:0,playlists:req.playlists,modify_informations:req.modify_informations,lastplay:req.lastplay})
完后这个功能之后,自己觉得还可以优化一下。因为从特性上将,表单具有默认的提交行为,默认是同步的,即同步表单提交,浏览器会锁死(转圈… …),等待服务端的响应结果。
同步表单提交,浏览器会直接将服务端响应内容,直接渲染到客户端浏览器所谓的(页面容器中)。因此,同步请求返回结果,无论是什么,浏览器都会进行显示覆盖。

在这里插入图片描述

并且如果用户输错了账号密码,输入框里面的信息就会被清空,不得不使得用户重头到尾再输入一遍,如果遇到了需要填写数据比较多的情况,这是极其不利于用户体验的。
考虑到同步请求有那么多的弊端,所以自己想要把登录注册原先的表单提交改成ajax异步请求(formdata),但问题也随之出现了,我发现服务端的res.render竟然不起作用了,根本渲染不了指定的页面,而且在服务端竟然还没有报错。
当时一直找不到原因,明明那一行代码自己并没有动过,所以根本不知道自己到底错在了哪里。
  var formData = new FormData(document.getElementById('register_form'))
        var xhr = new XMLHttpRequest()
        xhr.open('post',"/register")
        xhr.send(formData)
            xhr.onload = function() {
                var err_code = JSON.parse(xhr.responseText).err_code
                if(xhr.status == 200&&err_code == 1) {
                    window.location.href = '/login'
                }else if(xhr.status == 200&&err_code == 0) {
                    window.alert('注册失败')
                }
            }
经过在网上周旋了一番,才找到真正的原因:原来服务端重定向针对客户端的异步请求是无效的。这才恍然大悟!

最后在代码中改进了一下,使用域名url来跳转页面才把问题给解决:

window.location.href = '/login'
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值