本地小程序開發工具測試請求接口都很正常,使用預覽和真機調試功能在手機上運行請求接口老是失敗。小程序
小程序上線後,部分手機請求接口正常,部分手機請求接口失敗,將請求接口複製到谷歌瀏覽器中查詢老是成功的。api
restful 接口定義爲:https://ip:port/bus/:router_name
,其中 router_name
是個變量。實際請求接口爲:https://ip:port/bus/993路
,能夠看到:請求地址中的變量router_name
被 993路
給替換了。問題就出在這裏,請求地址中含有中文。瀏覽器
在 小程序開發工具
、谷歌瀏覽器
和 部分請求成功的手機
上最終發出的請求都會對請求地址中的中文漢字進行編碼,以下:restful
在 開發工具中預覽功能
、開發工具中真機調試功能
和 部分請求不成功的手機
上最終發出的請求並不會對中文進行編碼,以下:工具
上面分析了請求接口失敗是由於部分手機沒有對請求地址中的中文進行編碼,解決方法爲利用 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路
進行編碼再替換變量值便可。編碼