fetch 報錯 Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.
翻譯過來就是 無法在window上執行fetch:使用get/head方法請求不能有body
錯誤代碼:src/api/index.js
import Fetch from '../fetch/index' import jk from './jk' export default { verifycodeApi: params => Fetch(jk.verifycode, {method: 'get',body: params}) }
這里的get方法中,接受參數用了body,所以報錯。
解決方案:
在封裝的fetch.js中
const Fetch = (url, option = {}) => { // 格式化get請求的數據(fetch的get請求需要需要將參數拼接到url后面) if (option.method === 'get') { if (option.data) { url = url + formatUrl(option.data) } } // 對非get類請求頭和請求體做處理 if (option.method === 'post' || option.method === 'put' || option.method === 'delete') { option.headers['Content-Type'] = option.headers['Content-Type'] || 'application/json' option.body = qs.stringify(option.body) // option.body = JSON.stringify(option.body) } delete option.data }
重點是標橙色的代碼,這里是為了給get方法創建一個data的屬性,在拼接完url以后,最后用delete刪除這個data的屬性
那么,在src/api/index.js
// api文件存放接口文件夾 import Fetch from '../fetch/index' import jk from './jk' export default { manageloginApi: params => Fetch(jk.managelogin, {method: 'post', body: params}), verifycodeApi: params => Fetch(jk.verifycode, {method: 'get', data: params}) }
就可以用data屬性存放get傳過來的參數,避免了body傳參的報錯