需求:vue+iview 使用upload上傳文件,同時還要提交簡單的鍵值對和復雜嵌套的數
簡單的這樣格式是可以的
upoladData: { 'opUserId': id, 'opUserName': name, },
但是這樣的格式 是會報錯的
upoladData: { 'opUserId':id, 'opUserName': name, 'otherData':{ 'code': codes } },
Ajax請求發送的FormData是"[object object]"
但是processData 這個屬性 屬於jquery下面的ajax的屬性。
然后看了view upload 的源碼 發現 使用的是XMLHttpRequest.send() ,參數都是轉換成為 FormData
FormData 模擬提交包含簡單鍵值對和文件的Form表單時,如果是post請求,數據會以鍵值對形式被放在請求體中。這樣是沒有問題的
upoladData: { 'opUserId': id, 'opUserName': name, },
但是對象里面再嵌套對象
upoladData: { 'opUserId':id, 'opUserName': name, 'otherData':{ 'code': codes } },
這樣提交以后,后端接收到的projection是object,無法解析出projection的值。原因是multipart/form-data本來就只能發送文件和不嵌套的鍵值對
解決:把需要嵌套的json數據在發送前用JSON.stringfy()方法轉為json字符串,放入form表單中,就可以了。
let otherData = { 'code': codes } upoladData: { 'opUserId':id, 'opUserName': name, 'otherData':JSON.stringify(otherData) },