使用vue作數據請求,首先考慮的是封裝請求方法request.jsphp
import axios from 'axios' import Qs from 'qs' // 建立一個axios實例 const service = axios.create({ headers: { 'Content-Type': 'application/x-www-form-urlencoded', // 'content-type': 'application/json;charset=UTF-8', // 'x-token': 'one' }, // baseURL: 'http://dianphp.fyz.com', baseURL: '/', method: 'post', transformRequest:[function(data){ return Qs.stringify(data) }], withCredentials: true, timeout: 5000 }) // 添加請求攔截器 service.interceptors.request.use(config => { // 在發送請求以前作某事,好比說 設置token // config.headers['token'] = 'token'; config.headers['x-token'] = 'xxxxxxxxxxxxxxxxxxx'; return config; }, error => { // 請求錯誤時作些事 return Promise.reject(error); }); // 添加響應攔截器 service.interceptors.response.use(response => { const res = response.data; // // 若是返回的狀態不是200 就主動報錯 // if(res.state != 200){ // return Promise.reject(res.message || 'error') // } return res; }, error => { return Promise.reject(error.response.data); // 返回接口返回的錯誤信息 }) export default service
這裏須要注意的是baseURL,不要寫服務器的地址,若是這裏配置服務器的地址就會報跨域的錯誤vue
這裏解決跨域的問題是在 config 目錄下的 dev 裏面進行配置proxyTable:ios
proxyTable: { '/api': { target: 'http://dianphp.fyz.com', changeOrigin: true, pathRewrite: { '^/api': '/api' } } },
其次是在開發過程當中後存在OPTIONS跨域的問題,我使用的是thinkphp,多是thinkphp的路由問題,配置的時候須要配置 options請求thinkphp
return [ // 'api/user/login' => 'api/user/login', 'api/user/login' => ['api/user/login',['method' => 'post|get|options']], ];
而後請求參數裏面添加 header:json
public function login(){ header('Access-Control-Allow-Origin: *'); $list = $this->getlayuilist(); return $list; }
request.js的使用方法:axios
一、新建 api/role.jsapi
role.js跨域
import request from '@/utils/request' class RoleService{ getRoutes(data){ return request({ url: '/api/user/login', method: 'post', }) // return request({ // url: '/api/user/login', // method: 'post', // data:data // }) } getRoles() { return request({ url: '/roles', method: 'get' }) } addRole(data) { return request({ url: '/role', method: 'post', data }) } updateRole(id, data) { return request({ url: `/role/${id}`, method: 'put', data }) } deleteRole(id) { return request({ url: `/role/${id}`, method: 'delete' }) } } export default new RoleService()
具體組件的使用:服務器
import roleApi from '@/api/role'
使用方法:app
roleApi.getRoutes().then(res => { console.log(res); console.log('請求成功'); })