Maison  >  Article  >  interface Web  >  Comment implémenter une requête ajax à l'aide d'axios (tutoriel détaillé)

Comment implémenter une requête ajax à l'aide d'axios (tutoriel détaillé)

亚连
亚连original
2018-06-19 16:09:071859parcourir

Je vous ai déjà présenté l'utilisation par jQuery de la manière la plus élégante d'écrire des requêtes ajax. Cet article vous présente principalement les informations pertinentes sur la pratique avancée d'axios et l'utilisation de la manière la plus élégante d'écrire des requêtes ajax. utilise des exemples. L'introduction du code est très détaillée et a une certaine valeur d'apprentissage de référence pour les études ou le travail de chacun. Les amis qui en ont besoin peuvent y jeter un œil ci-dessous.

Avant-propos

Je pense qu'Ajax n'a pas besoin d'être trop présenté. L'auteur croit fermement que les problèmes qui peuvent être résolus avec la configuration le sont. pas codé en dur. Les mots suivants ne seront pas assez dits, jetons un coup d'œil à l'introduction détaillée.

Article complémentaire jQuery Advanced : Écrivez des requêtes ajax de la manière la plus élégante

axios est la bibliothèque ajax officiellement recommandée par Vue, utilisée pour remplacer vue-resource. Pour des connaissances de base plus détaillées, veuillez vous référer à cet article : //www.jb51.net/article/109444.htm

Avantages :

  • Pour ajouter une interface ajax, il vous suffit d'écrire quelques lignes supplémentaires dans le fichier de configuration

  • Vous n'avez pas besoin d'écrire des appels axios dans le composant, appelez simplement la méthode api directement, ce qui est très pratique

  • Si l'interface est ajustée, il suffit de modifier le fichier de configuration de l'interface

  • Gestion unifiée de la configuration de l'interface

1. Configuration du type de contenu

// filename: content-type.js
module.exports = {
 formData: 'application/x-www-form-urlencoded; charset=UTF-8',
 json: 'application/json; charset=UTF-8'
}

2. 🎜>

// filename: api-sdk-conf.js
import contentType from './content-type'
export default {
 baseURL: 'http://192.168.40.231:30412',
 apis: [
 {
  name: 'login',
  path: '/api/security/login?{{id}}',
  method: 'post',
  contentType: contentType.formData,
  status: {
  401: '用户名或者密码错误'
  }
 }
 ]
}

3. Méthode request.js

// request.js
import axios from 'axios'
import qs from 'qs'
import contentType from '@/config/content-type'
import apiConf from '@/config/api-sdk-conf'
var api = {}
// render 函数用来渲染路径上的变量, 算是一个微型的模板渲染工具
// 例如render('/{{userId}}/{{type}}/{{query}}', {userId:1,type:2, query:3})
// 会被渲染成 /1/2/3
function render (tpl, data) {
 var re = /{{([^}]+)?}}/
 var match = ''
 while ((match = re.exec(tpl))) {
 tpl = tpl.replace(match[0], data[match[1]])
 }
 return tpl
}
// fire中的this, 会动态绑定到每个接口上
function fire (query = {}, payload = '') {
 // qs 特别处理 formData类型的数据
 if (this.contentType === contentType.formData) {
 payload = qs.stringify(payload)
 } 
 // 直接返回axios实例,方便调用then,或者catch方法
 return axios({
 method: this.method,
 url: render(this.url, query),
 data: payload,
 headers: {
  contentType: this.contentType
 }
 })
}
apiConf.apis.forEach((item) => {
 api[item.name] = {
 url: apiConf.baseURL + item.path,
 method: item.method,
 status: item.status,
 contentType: item.contentType,
 fire: fire
 }
})
export default api

4. dans le composant

import api from '@/apis/request'
...
  api.login.fire({id: '?heiheihei'}, {
  username: 'admin',
  password: 'admin',
  namespace: '_system'
  })
...

Résultats du navigateur :

Request URL:http://192.168.40.231:30412/api/security/login??heiheihei
Request Method:POST
Status Code:200 OK
Remote Address:192.168.40.231:30412
Referrer Policy:no-referrer-when-downgrade
POST /api/security/login??heiheihei HTTP/1.1
Host: 192.168.40.231:30412
Connection: keep-alive
Content-Length: 47
Accept: application/json, text/plain, */*
Origin: http://localhost:8080
contentType: application/x-www-form-urlencoded; charset=UTF-8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
username=admin&password=admin&namespace=_system

Plus

Il y a un endroit que je ne comprends pas très bien, j'espère que quelqu'un qui comprend pourra me donner une réponse

Si un composant n'a besoin que de la méthode de connexion, mais j'obtiendrai un erreur quand je l'écris comme ça.

import {login} from '@/apis/request'
Le principe d'écrire comme ceci est d'écrire

export var login = api.login
à la fin de request.js Mais c'est ce que je ne veux pas, car à chaque fois une interface. est ajouté, il doit être exporté ici. Une fois, cela n'est pas conforme au principe ouvert-fermé.

J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.

Articles associés :

Comment implémenter le packaging gulp à l'aide de nodejs

Interprétation détaillée des nouvelles fonctionnalités d'Angular5.1

Comment utiliser vuex pour implémenter la gestion des menus

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn