小程序: 不支持 FormData(坑)

小程序不支持 formdata 解决方案
更新于: 2023-07-07 08:53:23

小程序环境不存在 FormData 全局对象,除一些二进制数据(File/Blob) 需要用到 FormData 的场景,可以直接使用 x-www-form-urlencoded 替换,小程序的请求工具,会自己替换成 FormData 传递。

上传文件等场景就另外处理了。

我遇到的

POST https://teacher-app-api.beta.saybot.net/api/v2/clazz/24058340/inviteStudent
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1dHl_TOKEN

mobile=18602131601&passportId=70691809&chineseName=%E5%AD%A6%E7%94%9F&englishName=student

思路1

看起来像 FormData,实际上是 urlencoded

思路2

简单实现一个 formdata 方法,提交 formdata

 wx.request({
            url: 'https://api.zbgedu.com/api/edu/zbids/student/studentAddToActivity',
            method: 'POST',
            header: {
                'content-type': 'multipart/form-data; boundary=XXX'
            },
            data: '\r\n--XXX' +
                '\r\nContent-Disposition: form-data; name="studentId"' +
                '\r\n' +
                '\r\n' + params.studentId +
                '\r\n--XXX' +
                '\r\nContent-Disposition: form-data; name="activityId"' +
                '\r\n' +
                '\r\n' + params.activityId +
                '\r\n--XXX--',
            success: function (res) {
                console.log(res, '参加活动接口')
            }
        })
function formdata(obj = {}) {
  let result = "";
  for (let name of Object.keys(obj)) {
    let value = obj[name];
    result +=
      "\r\n--XXX" +
      '\r\nContent-Disposition: form-data; name="' +
      name +
      '"' +
      "\r\n" +
      "\r\n" +
      value;
  }
  return result + "\r\n--XXX--";
}

参考