微信小程序上线后请求接口总是失败?

一、问题

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

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

二、原因分析

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

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

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

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

image.png

三、解决方法

上面分析了请求接口失败是因为部分手机没有对请求地址中的中文进行编码,解决方法为利用 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路 进行编码再替换变量值即可。

你可能感兴趣的:(微信小程序上线后请求接口总是失败?)