大事件后台项目登录失败

本文记录大事件后台管理项目的登录事件中,浏览器返回的res.status与通过postman调用的接口返回的status不相同的原因。为什么导致了登录失败。先说个人的结论:

数据提交的格式不同,status值也会不一样。值不一样,就会登录失败。我们知道,post请求的数据提交格式有以下四种:application/x-www-form-urlencoded、multipart/form-data、raw、binary。常用的是前两种。       同样的数据,application/x-www-form-urlencoded格式调用api返回的内容是这样:

 图1正确的返回数据(x-www-form-urlencoded格式)

而multipart/form-data格式调用的api返回的数据是这样:

图二 错误的返回数据(form-data格式)

那么问题来了,我们在客户端上接收到的返回数据是以上哪种呢?先通过浏览器控制台输出一波得知很不幸是第二种(图二)

//如果返回的status值是1,则登录失败,且提示message的内容 
 if (res.status !== 0) {
                console.log(res.status)
                return layer.msg(res.message)
            } layer.msg('登录成功')

 图三

图四 真实的返回status 

那就说明,我们js文件中传输给服务器端的数据类型不对,我们要更改它的数据传输类型为x-www-form-urlencoded,通过层层搜索如何更改Ajax post请求数据类型,有很多种写函数再调用的方式,可这对新手不太友好。最终个人想到的是在Ajax APIs中找有什么办法可以在调用post请求时,自带传输的数据类型为我想要的格式(实际情况不是直接就找到,而是排除了几种办法)

看到一个熟悉的办法虽然它不符合我的要求,但感觉有眉目了(要解决本问题,我们不能发送表单格式的数据):

图五 

好的,在排除了不对的方法之后,我们想象,要怎样修改提交方式。还是按照之前的办法,发起Ajax post请求如何?

        $.post('http://api-breakingnews-web.itheima.net/api/login', {
            username: $('#form_login [name=username]').val(),
            password: $('#form_login [name=password]').val()
        }, function (res) {
            if (res.status !== 0) {
                console.log(res.status)
                return layer.msg(res.message)
            } layer.msg('登录成功')
            location.href = '/index.html'
        }
        )

         图六 修改后的提交方式

而不是原来文件中的$.ajax方式。最终成功实现了正常的功能。

                         图七

感悟:我在解决这个问题的时候,花费了半天的时间。最后问题的解决的办法却没有想象中的那么难,最主要是自己没有选对方法,把重点花在了寻找原因这个过程中,而没有进行独立深层次的思考。另外查找官方文档源码真的是最有效的方法,当我想起看官方源码到解决问题,不到十分钟的时间。。。(缅怀我那逝去的半天)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值