这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战
一、前言
1.我之前写一个小项目的时候,需要后端提供的接口来加载一个页面的数据,通过wx.request的时候我发现调试器直接给我报了个500错误。修改了一下表头的之后,报了个404错误。。。(这个404是我的后端小伙伴返回的,并不是真的找不到)于是我修改了一下data里面的数值。
2.修改数值再调用发现始终是404,确定我这边是数据和url路径都没有错,经过几天苦苦思索,终于发现是session的问题,于是我通过缓存保持了登录状态终于请求成功。 如下是具体解决404可能有用的措施。
二、正确书写表头
关于第一个问题,是我data里面的参数写错了,没有按后端的文档写,同时,参数注意看清楚需要“”吗,这个“”困扰了我好久。 另外因为是POST请求,需要 把 ‘Content-Type’: ‘application/json’改成‘Content-Type’: ‘application/x-www-form-urlencoded’,前者用于GET后者用于POST。
三、保存session状态
wx.request({
url: '后端给你的url地址',
data:{
//写想要传递给后端的数据
},
method:"POST",
header:{
"Content-Type": "application/x-www-form-urlencoded"//post请求必须加这个
},
success(res){
console.log(res)
if (res && res.header && res.header['Set-Cookie']) {//能拿到返回内容且拿到返回内容的header且拿到返回内容的header中的['Set-Cookie'],我们就移除原本在缓存中cookie
wx.removeStorageSync('cookie')//移除缓存中已有的cookie,当然第一次可能没有
wx.setStorageSync('cookie', res.header['Set-Cookie'])//把我们新拿到的表头放进去
} else {
console.log("we lost")
}
let cookie = wx.getStorageSync('cookie')//需要的时候从缓存拿到cookie
app.globalData.cookey=cookie//把缓存拿到的cookie存到全局变量里就可以在其它函数的header中使用啦
console.log(app.globalData.cookey)
}
})//以上就拿到了cookie
这种就是在url和参数没有问题的情况下,接口依然404或其它错误,可能是因为request每次调用都不会保存之前的session状态(就如果有些接口需要你登录后才允许调用的,你也会被视为没有登录而调用出错)。
header: { "Content-Type": "application/x-www-form-urlencoded", 'cookie': app.globalData.cookey }
拿到这个cookie我们就可以把它添加我们需要的接口的表头中了,至此,完成!