Toute application Web qui communique avec un serveur backend ne peut pas se passer de demandes HTTP. Le frontal a besoin de données, il demande donc des données sur une demande HTTP réseau (ou communément appelée AJAX) et le serveur renvoie la réponse. Presque chaque site Web le fait en quelque sorte ces jours-ci.
Pour les grands sites Web, nous pouvons nous attendre à voir plus de demandes comme celle-ci. Plus de données, plus d'API et des cas plus spéciaux. à mesure que la taille du site Web augmente, il est très important de rester organisé. Un concept classique est sec (ne vous répétez pas), qui fait référence au processus de résumé du code pour éviter les doublons. Ceci est idéal car il nous permet généralement d'écrire du code une fois, de l'utiliser à plusieurs endroits et de mettre à jour en un seul endroit, plut?t que dans chaque instance.
Nous pouvons également utiliser des bibliothèques pour nous aider. Pour Ajax, Axios est un choix populaire. Vous le connaissez peut-être déjà, et vous l'utilisez même pour la publication autonome et obtenez des demandes pendant le développement.
Installation et bases
Il peut être installé à l'aide de NPM (ou de fil):
Axe d'installation de NPM
Une demande de poste autonome utilisant Axios ressemble à ceci:
axios.post ('https://axios-app.firebaseio.com/users.json', formdata) .Then (res => console.log (res)) .Catch (error => console.log (erreur))
JavaScript natif Il existe également de nombreuses fa?ons d'exécuter du code JavaScript. Il convient de noter que fetch (). Alors pourquoi utiliser la bibliothèque? Tout d'abord, la gestion des erreurs de Fetch est très étrange. Dès le début, l'utilisation d'Axios sera beaucoup plus facile. Si vous voulez voir la comparaison, nous avons un article qui couvre les deux méthodes et une autre discute de la valeur de cette méthode abstraite.
Une autre raison d'utiliser Axios? Cela nous donne plus d'opportunités à sec, alors jetons un coup d'?il.
Configuration globale
Nous pouvons configurer une configuration globale (par exemple, dans notre fichier Main.js) qui gère toutes les demandes d'application à l'aide de la configuration standard , qui est définie via l'objet par défaut fourni avec Axios.
Cet objet contient:
- BUSURL: L'URL relative utilisée comme préfixe de toutes les demandes, et chaque demande peut être jointe à l'URL.
- En-têtes: en-têtes personnalisés qui peuvent être définis en fonction des demandes
- Timeout: Le moment où la demande est interrompue, généralement en millisecondes. La valeur par défaut est 0, ce qui signifie qu'elle n'est pas applicable.
- WithCredentials: indique si les informations d'identification doivent être utilisées pour les demandes de contr?le d'accès croisées. La valeur par défaut est fausse.
- ResponseType: indique le type de données que le serveur renvoie. Les options incluent JSON (par défaut), ArrayBuffer, Document, Text et Stream.
- Responsencoding: indique le codage utilisé pour décoder la réponse. La valeur par défaut est UTF8.
- xsrfcookiename: le nom du cookie utilisé comme valeur de jeton xsrf, la valeur par défaut est xsrf-token.
- xsrfheadername: le nom de l'en-tête HTTP qui héberge la valeur de token xsrf. La valeur par défaut est x-xsrf-token.
- MaxContentLength: définit la taille maximale (en octets) du contenu de réponse HTTP autorisé
- MaxBodyLength: définit la taille maximale (en octets) du contenu de demande HTTP autorisé
La plupart du temps, vous n'utiliserez que BUSTURL, EN-HEADER et PROBABLEMENT TEMPS. Les autres sont moins couramment utilisés car ils ont des valeurs par défaut intelligentes, mais il est agréable de conna?tre leur existence si vous devez résoudre la demande.
C'est ce que fait Dry. Pour chaque demande, nous n'avons pas à répéter la base de l'API ou à répéter les en-têtes importants dont nous pourrions avoir besoin dans chaque demande.
Voici un exemple où notre API a une adresse de base, mais elle a également plusieurs points de terminaison différents. Tout d'abord, nous définissons certaines valeurs par défaut:
// main.js importer axios à partir de ?Axios?; axios.defaults.baseurl = 'https://axios-app.firebaseio.com' // préfixe url axios.defaults.heders.get ['accepter'] = 'application / json' // les en-têtes par défaut pour toutes les demandes obtiennent Axios.DefaultS.heders.post ['accepter'] = 'apposé / json' // Axios plus concise, sans définir ces en-têtes, mais a toujours la possibilité de personnaliser le point de terminaison de l'URL final: // Form.js Importation des composants axios à partir de ?axios?; Exporter par défaut { Méthodes: { onSubmit () { // URL est maintenant https://axios-app.firebaseio.com/users.json axios.post ('/ users.json', formdata) .Then (res => console.log (res)) .Catch (error => console.log (erreur)) } } }
Remarque: Cet exemple est en Vue, mais ce concept s'étend à tout environnement JavaScript.
Instance personnalisée
La configuration des instances personnalisées est similaire à la configuration globale, mais avec des Scopes limitées aux composants spécifiés. C'est donc toujours une technologie sèche, mais avec une hiérarchie.
Nous allons configurer notre instance personnalisée dans un nouveau fichier (nommez-le Authaxios.js) et l'importons dans le composant "Suivre".
// Authaxios.js Importer des axios à partir de ?Axios? const usominstance = axis.create ({{ BUSURL: 'https://axios-app.firebaseio.com' }) personnalisation.defaults.heders.post ['accepter'] = 'application / json' // ou comme ?a ... const usominstance = axis.create ({{ BUSURL: ?https://axios-app.firebaseio.com?, En-têtes: {'accepter': 'application / json'} })
Ensuite, nous importons ce fichier dans le composant de formulaire:
// Form.js Component // Importer l'importation axios à partir de './authaxios' Exporter par défaut { Méthodes: { onSubmit () { axios.post ('/ users.json', formdata) .Then (res => console.log (res)) .Catch (error => console.log (erreur)) } } }
Intercepteur
Un intercepteur peut gérer des situations où les configurations globales ou les instances personnalisées peuvent être trop générales, ce qui signifie que si vous définissez des en-têtes dans leurs objets, il sera appliqué aux en-têtes pour chaque demande du composant affecté. L'intercepteur est capable de modifier dynamiquement les propriétés d'objet. Par exemple, nous pouvons envoyer différents en-têtes en fonction de toute condition que nous choisissons dans l'intercepteur (même si nous définissons l'en-tête dans l'objet).
Les intercepteurs peuvent être dans le fichier main.js ou dans le fichier d'instance personnalisé. La demande est interceptée après avoir été envoyée et nous permet de modifier le traitement de la réponse.
// Ajouter une demande interceptor axios.interceptors.request.use (fonction (config) { // Faites quelque chose avant d'envoyer la demande, par exemple, nous insérons un délai d'expiration uniquement pour les demandes avec une baisse spécifique (config.baseur === 'https://axios-app.firebaseio.com/users.json') {{ config.timeout = 4000 } autre { configuration de retour } console.log (config) return config; }, fonction (erreur) { // effectuer certaines opérations sur les erreurs de demande return promest.reject (error); }); // Ajouter un intercepteur de réponse axios.interceptors.response.use (fonction (réponse) { // Effectuez certaines actions sur les données de réponse, telles que console.log, modification de l'en-tête ou ajout d'un comportement conditionnel comme nous le faisons ici, en modifiant les routes en fonction de l'état de la réponse ou de l'écart de la bo?te d'alerte si (réponse.status === 200 || Response.status === 201) { router.replace (?page d'accueil?) } autre { alerte (?comportement d'exception?) } console.log (réponse) réponse de retour; }, fonction (erreur) { // effectuer certaines opérations sur les erreurs de réponse return promest.reject (error); });
Les intercepteurs, comme son nom l'indique, intercepte les demandes et les réponses pour prendre différentes actions en fonction des conditions fournies. Par exemple, dans l'intercepteur de la demande ci-dessus, nous n'insertons le délai d'expiration de l'état que lorsque la demande a une fondon spécifique. Pour la réponse, nous pouvons l'intercepter et modifier ce que nous retournons, comme modifier l'itinéraire ou afficher une bo?te d'alerte, selon le code d'état. Nous pouvons même fournir plusieurs conditions basées sur différents codes d'erreur.
Au fur et à mesure que le projet s'allonge, vous commencez à avoir de nombreux itinéraires et itinéraires imbriqués, qui communiquent tous avec le serveur en fonction de différents déclencheurs, et les intercepteurs seront très utiles. En plus des conditions que j'ai fixées ci-dessus, il existe de nombreuses autres situations qui peuvent nécessiter l'utilisation d'un intercepteur, selon votre projet.
Fait intéressant, nous pouvons faire appara?tre l'intercepteur pour empêcher qu'il ait un impact. Nous devons attribuer l'intercepteur à une variable et le sortir à l'aide d'une méthode pop-up correctement nommée.
const reqinterceptor = axios.interceptors.request.use (fonction (config) { // Faites quelque chose avant d'envoyer la demande, par exemple, nous insérons un délai d'expiration uniquement pour les demandes avec une baisse spécifique (config.baseur === 'https://axios-app.firebaseio.com/users.json') {{ config.timeout = 4000 } autre { configuration de retour } console.log (config) return config; }, fonction (erreur) { // effectuer certaines opérations sur les erreurs de demande return promest.reject (error); }); // Ajouter une réponse interceptor const resinterceptor = axios.interceptors.response.use (fonction (réponse) { // Effectuez certaines actions sur les données de réponse, telles que console.log, modification de l'en-tête ou ajout d'un comportement conditionnel comme nous le faisons ici, en modifiant les routes en fonction de l'état de la réponse ou de l'écart de la bo?te d'alerte si (réponse.status === 200 || Response.status === 201) { router.replace (?page d'accueil?) } autre { alerte (?comportement d'exception?) } console.log (réponse) réponse de retour; }, fonction (erreur) { // effectuer certaines opérations sur les erreurs de réponse return promest.reject (error); }); axios.interceptors.request.eject (reqInterceptor); axios.interceptors.request.eject (Resinterceptor);
Bien qu'il ne soit pas très couramment utilisé, vous pouvez mettre l'intercepteur dans une déclaration conditionnelle ou le supprimer en fonction de certains événements.
J'espère que cela vous donne une bonne compréhension du fonctionnement d'Axios et de la fa?on de l'utiliser dans votre application pour garder les demandes d'API aux principes secs. Alors que nous touchons la surface en répertoriant les cas d'utilisation courants et les configurations, Axios présente de nombreux autres avantages que vous pouvez explorer dans la documentation, y compris la possibilité d'annuler les demandes et d'empêcher le contrefa?on de demande inter-sites, ainsi que d'autres possibilités incroyables.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Il existe trois fa?ons de créer un rotateur de chargement CSS: 1. Utilisez le rotateur de base des frontières pour obtenir une animation simple via HTML et CSS; 2. Utilisez un rotateur personnalisé de plusieurs points pour atteindre l'effet de saut à travers différents temps de retard; 3. Ajoutez un rotateur dans le bouton et basculez les classes via JavaScript pour afficher l'état de chargement. Chaque approche souligne l'importance des détails de conception tels que la couleur, la taille, l'accessibilité et l'optimisation des performances pour améliorer l'expérience utilisateur.

Pour faire face à la compatibilité du navigateur CSS et aux problèmes de préfixe, vous devez comprendre les différences de prise en charge du navigateur et utiliser raisonnablement les préfixes des fournisseurs. 1. Comprendre les problèmes communs tels que Flexbox et le support de la grille, Position: Sticky Invalid et les performances d'animation sont différentes; 2. Vérifier l'état du support de la fonction de confirmation de Caniuse; 3. Utilisez correctement -webkit-, -moz-, -ms-, -o- et autres préfixes du fabricant; 4. Il est recommandé d'utiliser AutopRefixer pour ajouter automatiquement les préfixes; 5. Installez PostCSS et configurez le navigateur pour spécifier le navigateur cible; 6. Gérer automatiquement la compatibilité pendant la construction; 7. Les fonctionnalités de détection modernizr peuvent être utilisées pour les anciens projets; 8. Pas besoin de poursuivre la cohérence de tous les navigateurs,

HEMAINDIFFERENCESBetweendisplay: Inline, Block, Andinline-BlockInhtml / CSSareLayoutBehavior, SpaceUsage et StylingControl.1.InlineElementsflowWithText, Don'tStartNewLines, Ignorewidth / Height, AndonlyApplyhorizontalPadding / Marges - IdealForninetLetetStyLinSing

La définition du style de liens que vous avez visité peut améliorer l'expérience utilisateur, en particulier dans les sites Web à forte intensité de contenu pour aider les utilisateurs à mieux naviguer. 1. Utilisez CSS: Pseudo-classe visité pour définir le style du lien visité, tels que les changements de couleur; 2. Notez que le navigateur permet uniquement la modification de certains attributs en raison des restrictions de confidentialité; 3. La sélection des couleurs doit être coordonnée avec le style global pour éviter la brutalité; 4. Le terminal mobile peut ne pas afficher cet effet et il est recommandé de le combiner avec d'autres invites visuelles telles que les logos auxiliaires ic?nes.

Utilisez l'attribut Clip-Path de CSS pour recadrer des éléments en formes personnalisées, telles que les triangles, les encoches circulaires, les polygones, etc., sans compter sur des images ou des SVG. Ses avantages incluent: 1. Prend en charge une variété de formes de base telles que le cercle, l'ellipse, le polygone, etc.; 2. Ajustement réactif et adaptable aux terminaux mobiles; 3. Facile à l'animation, et peut être combiné avec le survol ou le javascript pour obtenir des effets dynamiques; 4. Il n'affecte pas le flux de disposition et ne culte que la zone d'affichage. Les usages communs sont tels que le chemin de clip circulaire: cercle (50pxatcenter) et trame de clip Triangle: polygone (50% 0%, 100 0%, 0 0%). Avis

Pour créer des images réactives à l'aide de CSS, elle peut être principalement réalisée grace aux méthodes suivantes: 1. Utilisez la largeur maximale: 100% et hauteur: Auto pour permettre à l'image de s'adapter à la largeur du conteneur tout en maintenant la proportion; 2. Utilisez les attributs SRCSET et tailles de HTML pour charger intelligemment les sources d'image adaptées à différents écrans; 3. Utilisez l'objet-ajustement et la position d'objet pour contr?ler le recadrage d'images et l'affichage de la mise au point. Ensemble, ces méthodes garantissent que les images sont présentées clairement et magnifiquement sur différents appareils.

Différents navigateurs ont des différences dans l'analyse CSS, ce qui entra?ne des effets d'affichage incohérents, y compris principalement la différence de style par défaut, la méthode de calcul du modèle de bo?te, le niveau de support Flexbox et la disposition de la grille et le comportement incohérent de certains attributs CSS. 1. Le traitement de style par défaut est incohérent. La solution consiste à utiliser cssreset ou normaliser.css pour unifier le style initial; 2. La méthode de calcul du modèle de bo?te de l'ancienne version de IE est différente. Il est recommandé d'utiliser la taille d'une bo?te: Border-Box de manière unifiée; 3. Flexbox et Grid fonctionnent différemment dans les cas de bord ou dans les anciennes versions. Plus de tests et utilisent Autoprefixer; 4. Certains comportements d'attribut CSS sont incohérents. Caniuse doit être consulté et rétrogradé.

Le choix des unités CSS dépend des exigences de conception et des exigences réactives. 1.PX est utilisé pour la taille fixe, adaptée à un contr?le précis mais au manque d'élasticité; 2.EM est une unité relative, qui est facilement causée par l'influence de l'élément parent, tandis que REM est plus stable en fonction de l'élément racine et convient à la mise à l'échelle globale; 3.VW / VH est basé sur la taille de la fenêtre, adaptée à la conception réactive, mais l'attention doit être accordée aux performances sous des écrans extrêmes; 4. Lors du choix, il doit être déterminé en fonction de la question de savoir si les ajustements réactifs, les relations de hiérarchie d'éléments et la dépendance de la fenêtre. Une utilisation raisonnable peut améliorer la flexibilité et la maintenance de la disposition.
