這篇文章帶給大家的內容是關於axios非同步請求資料的使用(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
使用Mock模擬好後端資料之後,就需要嘗試請求載入資料了。資料請求選擇了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 /someUrl this.$http.get('/someUrl').then(response => { // get body data this.someData = response.body; }, response => { // error callback }); }
4、vue-resource的跨網域請求問題
同樣地,由於瀏覽器的安全機制,vue-resource也面臨跨網域請求的問題。解決方案如下:在vue專案下的config/index.js 檔案裡面設定代理proxyTable:
dev: { // Paths assetsSubDirectory: '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: { // Paths assetsSubDirectory: '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");
以上是axios非同步請求資料的使用(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器