微信小程序在开发工具中请求接口正常,上线后请求接口老是失败??

1、问题

本地小程序开发工具测试请求接口都很正常,使用预览和真机调试功能在手机上运行请求接口老是失败。小程序

小程序上线后,部分手机请求接口正常,部分手机请求接口失败,将请求接口复制到谷歌浏览器中查询老是成功的。api

2、缘由分析

restful 接口定义为:https://ip:port/bus/:router_name,其中 router_name 是个变量。实际请求接口为:https://ip:port/bus/993路,能够看到:请求地址中的变量router_name993路 给替换了。问题就出在这里,请求地址中含有中文浏览器

小程序开发工具谷歌浏览器部分请求成功的手机 上最终发出的请求都会对请求地址中的中文汉字进行编码,以下:restful

对请求地址中的中文进行编码

开发工具中预览功能开发工具中真机调试功能部分请求不成功的手机 上最终发出的请求并不会对中文进行编码,以下:工具

image.png

3、解决方法

上面分析了请求接口失败是由于部分手机没有对请求地址中的中文进行编码,解决方法为利用 js 自带的 api encodeURIComponent() 处理。开发工具

encodeURIComponent('路')
"%E8%B7%AF"

有一点须要注意:不能对整个请求地址进行编码,那么的话会对全部除字母、数字之外的符号进行编码,会变成下面这样,实际请求中仍然会报错。测试

encodeURIComponent('https://xxxxx/bus/993路?direction=1')
"https%3A%2F%2Fxxxxx%2Fbus%2F993%E8%B7%AF%3Fdirection%3D1"

在处理 restful 接口过程当中,有一步用具体指(如:991路)替换请求地址中的变量(如:https://ip:port/bus/:router_name 中的:router_name),此时先对 991路 进行编码再替换变量值便可。编码

相关文章
相关标签/搜索