微信小程序填坑之路其一:wx.request發送與服務端接受


一.序言

應公司要求要求,要用小程序開發一個信息錄入系統。沒辦法只能聽話來填坑。

先介紹一下環境:客戶端——小程序;服務端——java;數據庫——mysql;服務器——centos7

需求:客戶端輸入信息,insert到數據庫,沒錯就是這么一個簡單的小功能,卻為這個請求折騰了大半天

二.開始

先來看一下wx.request的官方文檔:地址如下https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html#wxrequestobject

image

image

image

嗯,咋看之下貌似挺正常的,沒什么問題,想必寫過ajax請求的同學都是一看就明白,這應該是封裝了一下ajax的請求。好了,我們接下來開始填坑…

三.客戶端

為了有一個接口地址,花了一個月時間去買了服務器、注冊了域名、部署了一下、備案…得到了https的合法域名。

首先這個請求的url必須是https,老版本的怎樣不是很清楚,據說可以用http?想辦法弄一個https的域名先。

接着看一下整個請求代碼:

image

這邊data要寫成json形式大家都知道,但是,如果這樣寫:

image

我這邊是沒接受到數據,各種報錯,大家可以試試。然后這個json數據呢,要先轉一下格式:

image

區別就是一個是jsonObj,而這里是json字符串。直接post jsonObj過去,我這里測的是服務端接受直接報錯,各種getxxxxx()都用過,有大佬測試成功的告訴我一下,謝謝。

然后看下面一行,header.這個默認是application/json 嗯,我這樣試了下:

image

這是請求的數據,可以看到,發送的時候數據還是正常的,然后服務端接收:

image

結果數據庫顯示:

image

看了一下log:

image

中文變成了亂碼。首先看一下mysql的編碼,是utf-8沒錯,mysql的GUI工具Navicat for Mysql 字符集也是UTF-8,以為是linux服務器編碼問題,去看了一下並且改成了utf-8,但亂碼情況依然出現。

接着我不從小程序post,我直接在這個網站頁面上寫個ajax,放個中文數據到json中,post到后台再插入到數據庫看看會不會亂碼:

image

接着發現只要不是從小程序post的數據,都不會出現亂碼情況,然后log里面顯示,在進入servlet后,接收到小程序post過來的json數據時就變成了亂碼。

由這些推斷出,是在傳輸過程中,編碼不統一導致的。

最后,終於試出了一個,能傳過去值,能接收到不顯示null,不顯示亂碼,服務器不報500的方法,小程序請求就如上面那個請求那樣寫,header這樣寫:

image
最后,method是POST。至此小程序端的請求就完成了,下面我們看下服務端用java怎么實現。

四.服務端

從小程序那邊post過來的是json字符串,請求是這樣的:

image

可以看到,這里的content-type都是utf-8的編碼,最下面從原來的requestpayload變成了formdata(requestpayload和formdata的區別可以百度),數據也是正確的。

然后服務端應該這樣接收:

image

上面三行代碼非常重要,防止出現請求跨域的情況,寫了前兩行代碼;防止出現亂碼,跟小程序那邊統一了編碼格式,setContentType成UTF-8

看一下log:

image

沒問題,再看一下數據庫:

image

 

最后,我們看一下小程序返回結果:

 

可以看到這里的data是我再服務端用out.print返回的結果,同樣沒問題。至此這個問題解決完美了。

五.結語

剛接觸小程序,感覺還是比較坑爹的,網上還有好多其他例子這里就不一一舉例了,要以輸出log為榮,知錯不報為恥..遇到問題先看一下log,經過測試最后一定能找到解決方法。

希望這篇能對同我一樣剛入坑的小伙伴有幫助吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM