axios異步請求數據的簡單使用

使用Mock模擬好后端數據之后(Mock模擬數據的使用參考:https://segmentfault.com/a/11...),就需要嘗試請求加載數據了。數據請求選擇了axios,現在都推薦使用axios。

axios(https://github.com/axios/axios)是基于 promise 的 HTTP 庫。如官網文檔介紹,npm i 之后,在需要的組件中加載就可以了。個人認為,編碼的魅力在于,解決問題的方法不止一種,有時候這個方法在你的開發環境下ok,在我的開發環境下卻不ok,所以,問題是各式各樣的,而解決問題的方法也是百花齊放的。

axios的入門

1、安裝

npm i axios -S

2、引入

在src目錄下新建apis.js文件(項目逐漸完善的過程中會有很有個api接口,當然也可以命名為axios.js,命名是為了讓別人看懂),并引入:import axios from 'axios';之后,編輯apis.js文件,考慮封裝axios.get或post請求

3、apis.js文件的編輯

import axios from 'axios';
const Domain = "http://localhost:8080";  // 定義根域名
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; // 設置post提交數據的格式// 封裝 post 請求
export function post(action, params){return new Promise((resolve, reject) => {// url 判斷是測試環境 就要拿 測試環境的域名, 正式環境的就要用 正式域名let url = Domain + action;axios.post(url, params).then(response => {resolve(response.data)}).catch(error => {reject(error)})});
}// 封裝 get 請求export function get(action, params){return new Promise((resolve, reject) => {axios.get(Domain + action, params).then(response => {resolve(response.data)}).catch(error => {reject(error)})});
}export default {postData(action, params){return post(action, params)},getData(action, params){return get(action, params)}
}

4、在需要的組件中進行引用

 import api from '../../apis.js';export default {name: "banner",data() {return {bannerList: []};},created(){this.getBanner(); // 在頁面渲染完成即加載},methods: {getBanner(){this.$api.getData('/getBanner').then(val => {this.bannerList = val.imgs;});}}
}

5、全局配置axios

很多組件都需要請求數據,每用一次導入一次很麻煩,全局配置之后就不用在組件中導入了。


在入口文件main.js中引入,之后掛在vue的原型鏈上:import api from './apis.js';
Vue.prototype.$http = api;在組件中使用:getBanner(){this.$http.getData('/getBanner').then(val => {this.bannerList = val.imgs;});}

6、axios結合vuex(在項目中還沒用到,如果有問題,歡迎指正)

在vuex的倉庫文件store.js中引用,使用action添加方法。action 可以包含異步操作,而且可以通過 action 來提交 mutations。action有一個固有參數context,但是 context 是 state 的父級,包含state、getters

import Vue from 'Vue'
import Vuex from 'vuex'
import axios from 'axios'Vue.use(Vuex)
export default new Vuex.Store({// 定義狀態state: {banners: {name: 'pic'}},actions: {// 封裝一個 ajax 方法saveBanner (context) {axios({method: 'get',url: '/getBanner',data: context.state.banners})}}
})

在組件中發送請求的時候,需要使用 this.$store.dispatch 來分發

methods: {getBananer() {this.$store.dispatch('saveBanner')  // actions里的方法名}
}

異步加載的幾種方法

1、$.ajax( url[, settings])

url: 要求為String類型的參數,(默認為當前頁地址)發送請求的地址。
type: 要求為String類型的參數,請求方式(post或get)默認為get。
data:規定要發送到服務器的數據。
async:布爾值,表示請求是否異步處理。默認是 true。
dataType: 要求為String類型的參數,預期服務器返回的數據類型。
contentType:要求為String類型的參數,當發送信息至服務器時,內容編碼類型默認為"application/x-www-form-urlencoded"。
success:要求為Function類型的參數,請求成功后調用的回調函數。
error:Function類型的參數,請求失敗后調用的回調函數。
jsonp:在一個 jsonp 中重寫回調函數的字符串。

$(function(){$('#send').click(function(){$.ajax({type: "GET",url: "test.json",data: {username:$("#username").val(), content:$("#content").val()},dataType: "json",success: function(data){// handle success}error: function(data){// handle error}jsonp: ""});});});

2、$.ajax 的跨域請求問題

當Ajax請求的url不是本地或者同一個服務器的地址時,瀏覽器會報一個錯誤:No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin…………由于瀏覽器的安全機制,不能調用不同服務器下的url地址。基于此,jQuery.ajax給出了jsonp的解決方案: 把服務器返回的數據類型設置為jsonp。

 $(function(){$('#send').click(function(){$.ajax({type: "GET",url: "test.json",data: {username:$("#username").val(), content:$("#content").val()},dataType: "jsonp",   // jsonp格式success: function(data){// handle success}error: function(data){// handle error}jsonp: "callback"});});});

但是,jsonp是一種非官方的方法,而且這種方法只支持get請求,不如post請求安全。此外,jsonp需要服務器配合,如果是訪問的是第三方服務器,我們沒有修改服務器的權限,那么這種方式是不可行的。

3、vue框架中的vue-resource

ue-resource是Vue.js的一款插件,它可以通過XMLHttpRequest或JSONP發起請求并處理響應。vue-resource體積小,支持主流瀏覽器。不過,vue2.0之后就不再更新了,尤大神推薦使用axios。

{// GET /someUrlthis.$http.get('/someUrl').then(response => {// get body datathis.someData = response.body;}, response => {// error callback});
}

全局配置post提交數據的格式:

Vue.http.options.emulateJSON = true;

全局配置根路徑:

Vue.http.options.root = 'http://localhost:8080';

4、vue-resource的跨域請求問題

同樣地,由于瀏覽器的安全機制,vue-resource也面臨著跨域請求的問題。解決方案如下:在vue項目下的 config/index.js 文件里面配置代理proxyTable:

dev: {// PathsassetsSubDirectory: 'static',assetsPublicPath: '/',proxyTable: {    // 新增,解決跨域請求問題'/api': {target: 'http://192.168.1.103:8080/',changeOrigin: true,pathRewrite: {'`/api': '/'}},secure: false},target中寫你想要請求數據的地址的域名

4、axios跨域請求的問題

與vue-resource一樣,在vue項目下的 config/index.js 文件里面配置代理proxyTable:

 dev: {// PathsassetsSubDirectory: 'static',assetsPublicPath: '/',proxyTable: {    // 新增,解決跨域請求問題'/api': {target: 'http://192.168.1.103:8080/',changeOrigin: true,pathRewrite: {'`/api': '/'}},secure: false},

不過vue-resource和axios這兩個方法,可能配置了代理proxyTable還是會報:No 'Access-Control-Allow-Origin' header is present on ……的問題,這需要后端服務器配合設置:

 header("Access-Control-Allow-Origin", "*");header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");

emmmm,總感覺自己還是有點懵 233

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388502.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388502.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

float在html語言中的用法,float屬性值包括

html中不屬于float常用屬性值的是float常用的值就三個:left\right\none。沒有其他的值了。 其中none這個值是默認的,所以一般不用寫。css中float屬性有幾種用法?值 描述left 元素向左浮動。 right 元素向右浮動。 none 默認值。元素不浮動,并…

它們是什么以及為什么我們不需要它們

Once in a while, when reading papers in the Reinforcement Learning domain, you may stumble across mysterious-sounding phrases such as ‘we deal with a filtered probability space’, ‘the expected value is conditional on a filtration’ or ‘the decision-mak…

LoadRunner8.1破解漢化過程

LR8.1版本已經將7.8和8.0中通用的license封了,因此目前無法使用LR8.1版本,包括該版本的中文補丁。 破解思路:由于軟件的加密程序和運行的主程序是分開的,因此可以使用7.8的加密程序覆蓋8.1中的加密程序,這樣老的7.8和…

TCP/IP網絡編程之基于TCP的服務端/客戶端(二)

回聲客戶端問題 上一章TCP/IP網絡編程之基于TCP的服務端/客戶端(一)中,我們解釋了回聲客戶端所存在的問題,那么單單是客戶端的問題,服務端沒有任何問題?是的,服務端沒有問題,現在先讓…

談談iOS獲取調用鏈

本文由云社區發表iOS開發過程中難免會遇到卡頓等性能問題或者死鎖之類的問題,此時如果有調用堆棧將對解決問題很有幫助。那么在應用中如何來實時獲取函數的調用堆棧呢?本文參考了網上的一些博文,講述了使用mach thread的方式來獲取調用棧的步…

python 移動平均線_Python中的移動平均線

python 移動平均線There are situations, particularly when dealing with real-time data, when a conventional average is of little use because it includes old values which are no longer relevant and merely give a misleading impression of the current situation.…

Ireport制作過程

Ireport制作過程 1、首先要到Option下設置一下ClassPath添加文件夾 2、到預覽->報表字段設置一下將要用到的字段 3、到編輯->查詢報表->寫sql語句,然后把語句查詢的字段結果與上面設置的報表字段的名要對應上 4、Option->選項->Compiler設置一下…

2018.09.16 loj#10243. 移棋子游戲(博弈論)

傳送門 題目中已經給好了sg圖&#xff0c;直接在上面跑出sg函數即可。 最后看給定點的sg值異或和是否等于0就判好了。 代碼&#xff1a; #include<bits/stdc.h> #define N 2005 #define M 6005 using namespace std; int n,m,k,sg[N],first[N],First[N],du[N],cnt0,an…

html5字體的格式轉換,font字體

路由器之家網今天精心準備的是《font字體》&#xff0c;下面是詳解&#xff01;html中的標簽是什么意思HTML提供了文本樣式標記&#xff0c;用來控制網頁中文本的字體、字號和顏色&#xff0c;多種多樣的文字效果可以使網頁變得更加絢麗。其基本語法格式&#xff1a;文本內容fa…

紅星美凱龍牽手新潮傳媒搶奪社區消費市場

瞄準線下流量紅利&#xff0c;紅星美凱龍牽手新潮傳媒搶奪社區消費市場 中新網1月14日電 2019年1月13日&#xff0c;紅星美凱龍和新潮傳媒戰略合作發布會在北京召開&#xff0c;雙方宣布建立全面的戰略合作伙伴關系。未來&#xff0c;新潮傳媒的梯媒產品將入駐紅星美凱龍的全國…

機器學習 啤酒數據集_啤酒數據集上的神經網絡

機器學習 啤酒數據集Artificial neural networks (ANNs), usually simply called neural networks (NNs), are computing systems vaguely inspired by the biological neural networks that constitute animal brains.人工神經網絡(ANN)通常簡稱為神經網絡(NNs)&#xff0c;是…

實例演示oracle注入獲取cmdshell的全過程

以下的演示都是在web上的sql plus執行的&#xff0c;在web注入時 把select SYS.DBMS_EXPORT_EXTENSION.....改成   /xxx.jsp?id1 and 1<>a||(select SYS.DBMS_EXPORT_EXTENSION.....)   的形式即可。(用" a|| "是為了讓語句返回true值)   語句有點長…

html視頻位置控制器,html5中返回音視頻的當前媒體控制器的屬性controller

實例檢測該視頻是否有媒體控制器&#xff1a;myViddocument.getElementById("video1");alert("Controller: " myVid.controller);定義和用法controller 屬性返回音視頻的當前媒體控制器。默認地&#xff0c;音視頻元素不會有媒體控制器。如果規定了媒體控…

ER TO SQL語句

ER TO SQL語句的轉換&#xff0c;在數據庫設計生命周期的位置如下所示。 一、轉換的類別 從ER圖轉化得到關系數據庫中的SQL表&#xff0c;一般可分為3類&#xff1a; 1&#xff09;轉化得到的SQL表與原始實體包含相同信息內容。該類轉化一般適用于&#xff1a; 二元“多對多”關…

dede 5.7 任意用戶重置密碼前臺

返回了重置的鏈接&#xff0c;還要把&amp刪除了&#xff0c;就可以重置密碼了 結果只能改test的密碼&#xff0c;進去過后&#xff0c;這個居然是admin的密碼&#xff0c;有點頭大&#xff0c;感覺這樣就沒有意思了 我是直接上傳的一句話&#xff0c;用菜刀連才有樂趣 OK了…

nasa數據庫cm1數據集_獲取下一個地理項目的NASA數據

nasa數據庫cm1數據集NASA provides an extensive library of data points that they’ve captured over the years from their satellites. These datasets include temperature, precipitation and more. NASA hosts this data on a website where you can search and grab in…

注入代碼oracle

--建立類 select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(FOO,BAR,DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE  create or replace and compile java source named "LinxUtil" as …

html5包含inc文件,HTML中include file標簽的用法

參數PathType將 FileName 的路徑類型。路徑可為以下某種類型&#xff1a;路徑類型 含義文件 該文件名是帶有 #include 命令的文檔所在目錄的相對路徑。被包含文件可位于相同目錄或子目錄中&#xff1b;但它不能處于帶有 #include 命令的頁的上層目錄中。虛擬 文件名為 Web 站點…

r語言處理數據集編碼_在強調編碼語言或工具之前,請學習這3個基本數據概念

r語言處理數據集編碼重點 (Top highlight)I got an Instagram DM the other day that really got me thinking. This person explained that they were a data analyst by trade, and had years of experience. But, they also said that they felt that their technical skill…

springboot微服務 java b2b2c電子商務系統(一)服務的注冊與發現(Eureka)

一、spring cloud簡介spring cloud 為開發人員提供了快速構建分布式系統的一些工具&#xff0c;包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等。它運行環境簡單&#xff0c;可以在開發人員的電腦上跑。Spring Cloud大型企業分布式…