微信小程序中通過組件<form>提交表單的時候,在js中通過e.detail.value得到所提交表單的json格式數據。一般提交表單我們都是通過wx.request請求,提交表單數據,通過參數data傳數據,
wx.request({ url: 'test.php', //僅為示例,並非真實的接口地址 data: { x: e.detail.value }, header: { 'content-type': 'application/json' // 默認值 }, success (res) { console.log(res.data) } }) }, formReset: function() { console.log('form發生了reset事件') } })
這樣做我們可以在通過接口在后台順利接收到參數。
但是還有一種,表單里面涉及到上傳圖片的情況(ps:微信中圖片的上傳一次只能上傳一張),我們通過wx.uploadFile上傳圖片,參數filePath是通過wx.chooseImage得到的圖片臨時路徑,這時我們可以通過參數formData來傳輸表單里的內容,但是如果我們如果還是直接通過e.detail.value得到表單數據直接上傳的話,后台能接受到這個參數,但是得不到具體數據,后台接收到的形式是[object object] 這是why?很明顯就是因為傳輸的格式不對,注意:wx.request的content-type
默認為 application/json而wx.uploadFile的
JSON.stringify(e.detail.value) 就是將json對象轉為字符串格式后再傳參,這樣在后台就可以完美的接受到數值了。content-type
為 multipart/form-data。那么我們怎么傳表單數據呢:
wx.uploadFile({ url: 'https://example.weixin.qq.com/upload', //僅為示例,非真實的接口地址 filePath: tempFilePaths[0], name: 'file', formData: { x: JSON.stringify(e.detail.value) }, success (res){ const data = res.data //do something } })