Comment utiliser la fonction «ajax» de jQuery

Après avoir suivi les trois tutoriels précédents, vous devriez avoir acquis une bonne compréhension d’AJAX. Dans ce dernier tutoriel, nous terminerons en travaillant avec un exemple plus complexe.

Le balisage

Pour avoir une idée de la structure de cet exemple, considérons le balisage suivant:

 

Le balisage pour le principale L'élément est présenté ci-dessous:

 

Frameworks front-end populaires

Cliquez sur chacun pour charger les détails via AJAX.

Bootstrap Foundation UIkit Interface utilisateur sémantique Skeleton Material Design Lite

Notez les liens de texte. Ceux-ci correspondent à différents frameworks front-end. Comme nous le verrons dans la section suivante, chaque fois que nous cliquons sur les liens, une demande AJAX sera exécutée. Ensuite, l'élément avec la classe de modal apparaîtra et son contenu sera mis à jour avec les données extraites de la réponse.

Voici comment principale l'élément ressemble à:

Balisage modal

La prochaine étape consiste à examiner la structure de notre modal. Voici le code HTML:

 
  • Cadre
  • Version actuelle
  • Nombre d'étoiles Github
  • Page Officielle

Comme vous pouvez le constater, le modal contient quelques éléments vides. Nous les plaçons dans le HTML car leur texte changera en fonction du lien sur lequel nous cliquons et de la réponse que nous récupérons..

L'image ci-dessous montre comment le modal apparaît initialement:

Par défaut, le modal est masqué. De plus, nous allons également cacher le chargeur. Cela n'apparaîtra que lorsque la demande AJAX sera déclenchée.

Regardez les règles CSS correspondantes:

 .modal opacité: 0;  .loader display: none;  

Notez que nous utilisons le opacité propriété (et non la afficher property) pour masquer le modal car cette propriété appartient aux propriétés CSS animables. De cette façon, nous pourrons faire la transition entre les états du modal (c'est-à-dire les états ouvert et fermé).

Génération de la réponse JSON

Pour les besoins de cet exemple, nous choisirons de construire nous-mêmes la réponse JSON. Plus précisément, la réponse attendue (c’est-à-dire le Demo.json fichier) sera un tableau d'objets. Chaque objet contiendra des détails concernant les frameworks front-end associés.

De plus, la valeur de la prénom propriété correspondra aux liens de texte de la principale élément (voir section précédente). Dans cet esprit, la structure de la réponse ressemble à ceci:

 ["url": "http://getbootstrap.com/", "numberOfStars": "88.260+", "currentVersion": "3.3.5", "name": "Bootstrap", "url": "http://foundation.zurb.com/", "numberOfStars": "21.180+", "currentVersion": "5.5.3", "name": "Foundation", // 4 autres objets ici] 

Remarque: les valeurs que nous avons utilisées pour la numberOfStars et version actuelle les propriétés sont fausses et uniquement à des fins de démonstration.

Semblable aux exemples précédents de cette série, nous utiliserons AJAX pour demander un fichier statique. Cependant, si nous souhaitons intégrer du contenu provenant d'autres sites (Google Maps, Flickr, par exemple), nous devons lire la documentation de leur API et, si nécessaire, demander une clé API..

De plus, nos données cibles résident sur le même serveur que la page de démonstration. Par conséquent, nous éviterons les limitations pouvant survenir lors de l'interaction avec des services tiers (voir la section «Limitations des demandes AJAX» du premier tutoriel)..

Implémentation de la demande AJAX

Dans cette section, nous utiliserons jQuery ajax fonction pour initialiser une requête AJAX. Avant de le faire, définissons d’abord nos variables en mettant en cache les sélecteurs jQuery les plus couramment utilisés:

 var $ list = $ ('. m-info'), var $ message = $ ('. m-message'); var $ modal = $ ('. modal'); var $ loader = $ ('. loader'); var $ framework; 

Maintenant, il est temps d'examiner le code responsable de l'exécution de la requête:

 $ ('. box a'). on ('click', fonction (e) e.preventDefault (); $ framework = $ (this) .text (); $ .ajax (url: 'Demo.json' , dataType: 'json', beforeSend: function () $ loader.show ();). done (successFunction) .fail (errorFunction) .always (alwaysFunction);); 

Vous remarquerez la syntaxe de la ajax fonction ressemble à ce qui suit:

 $ .ajax ([paramètres]) 

le réglages paramètre est un objet de configuration qui contient des informations sur notre requête. Le nombre de propriétés que cet objet peut avoir est très long (environ 34 propriétés). Par souci de simplicité, nous ne parlerons que de ceux utilisés dans cette démo. Plus précisement:

Propriété La description
url Une chaîne contenant l'URL à laquelle la demande est envoyée.
Type de données Le format des données de réponse (par exemple. JSON, xml, html).
avantEnvoyer Une fonction de rappel qui est exécutée avant l'envoi de la demande. Ici, cette fonction déclenche le code qui montre le chargeur.

Avant de poursuivre, il convient de mentionner trois choses:

  • Il y a aussi une autre syntaxe pour le ajax une fonction: $ .ajax (url [, settings])
  • Toutes les propriétés de configuration du réglages paramètre sont facultatifs.
  • La méthode HTTP par défaut est OBTENIR.

Méthodes de promesse

le ajax La fonction retourne l'objet jQuery XMLHttpRequest ou jqXHR. Cet objet implémente l'interface Promise et contient donc toutes les propriétés, méthodes et comportements d'une promesse..

Dans cet exemple, nous utilisons les méthodes Promise suivantes:

  • terminé
  • échouer
  • toujours

le terminé La méthode est déclenchée si la requête aboutit. Il reçoit un ou plusieurs arguments, qui peuvent tous être une seule fonction ou un tableau de fonctions. Par exemple, dans notre démo, le successFunction () est passé comme argument.

La fonction de rappel (par exemple. successFunction ()) accepte trois arguments. Tout d'abord, les données retournées. Deuxièmement, une chaîne catégorisant le statut de la demande (voir l’article précédent pour connaître ses valeurs possibles). Enfin, l'objet jqXHR.

le échouer La méthode est appelée si la requête échoue. Il reçoit un ou plusieurs arguments, qui peuvent tous être une seule fonction ou un tableau de fonctions. Par exemple, dans notre démo, le errorFunction () est passé comme argument.

La fonction de rappel (par exemple. errorFunction ()) accepte trois arguments: l'objet jqXHR, une chaîne catégorisant le statut de la demande et une autre chaîne spécifiant l'erreur résultante. Cette erreur reçoit la partie textuelle de l'état HTTP, telle que Pas trouvé ou Interdit.

le toujours La méthode est exécutée à la fin de la demande, quelle que soit la réussite (c'est-à-dire la terminé la méthode est exécutée) ou échec (c'est-à-dire le échouer la méthode est exécutée). De nouveau, il reçoit en argument une fonction unique ou un tableau de fonctions. Par exemple, dans notre démo, le alwaysFunction () est passé comme argument.

L'état de la demande spécifie les arguments de la fonction. En cas de demande réussie, le rappel (par exemple. alwaysFunction ()) reçoit les mêmes arguments que le rappel du terminé méthode. Au contraire, si la demande échoue, elle accepte les mêmes arguments que le rappel du échouer méthode.

Remarque: À la place du terminé, échouer, et toujours Méthodes de promesse utilisées dans cet exemple, nous aurions également pu utiliser le Succès, Erreur, et Achevée fonctions de rappel. Ces fonctions sont définies dans le réglages paramètre.

Affichage des données

Si la demande aboutit, nous sommes en mesure de récupérer les données de réponse. Ensuite, on le manipule pour peupler les éléments vides du modal.

Considérez le code pour le successFunction rappeler:

 function successFunction (data) if (data.length> 0) for (var i = 0; i < data.length; i++)  if ($framework === data[i].name)  $list.show(); $message.hide(); $list.find('li:nth-of-type(2)').text($framework); $list.find('li:nth-of-type(4)').text(data[i].currentVersion); $list.find('li:nth-of-type(6)').text(data[i].numberOfStars); $list.find('li:nth-of-type(8)').html('' + data[i].url + ''); break;  else  $list.hide(); $message.show().text('No data received for this framework!');    else  $list.hide(); $message.text('No data received from your respose!');   

Bien que nous ayons mis à jour le contenu de notre modal, celui-ci est toujours masqué. Il devient visible et le chargeur disparaît à la fin de la demande. Alors seulement, le toujoursfonction Le rappel est exécuté:

 function alwaysFunction () $ loader.hide (); $ modal.addClass ('active');  

le actif la classe ressemble à ceci:

 .actif opacité: 1; z-index: 10; transformer: échelle (1);  

Ci-dessous, vous pouvez voir l’aspect attendu du modal si vous cliquez sur le bouton Bootstrap lien texte:

Un couple de scénarios

Il est important de comprendre le code exécuté dans certaines circonstances. Couvrons deux scénarios courants:

  • La valeur de la prénom propriété ne correspond pas aux liens de texte du principale élément. Par exemple, supposons que nous définissions une URL où la valeur du prénom la propriété de l'objet lié au framework Foundation est Fondation2 au lieu de Fondation. Dans un tel cas, si on clique sur le bouton Fondation lien de texte, le modal ci-dessous apparaîtra:
  • Les données de réponse sont vides. Disons, par exemple, que nous définissions une URL qui pointe vers un tableau vide. Dans ce cas, le modal ressemblerait à ceci:

Gestion des erreurs

Nous avons donc couvert le code qui est déclenché lorsque la demande aboutit. Mais qu'advient-il si la demande échoue? En cas d’échec de la demande, nous masquons la liste et affichons un message personnalisé..

Voici le code de la failFunction () qui démontre ce comportement:

 fonction failFunction (request, textStatus, errorThrown) $ list.hide (); $ message.text ('Une erreur s'est produite lors de votre requête:' + request.status + "+ textStatus +" + errorThrown);  

Pour nous familiariser avec ce code, nous spécifions une URL qui n'existe pas. D'où le échouer La méthode sera déclenchée et le modal ci-dessous sera affiché:

Remarque: De nouveau, le message d'erreur peut être différent si vous exécutez cet exemple localement.

Voici la démo intégrée de Codepen:

Conclusion

Dans ce didacticiel, nous avons terminé notre examen d’AJAX du point de vue d’un concepteur de sites Web. Nous le félicitons de le suivre! J'espère que cette série vous a été utile et que vous avez acquis de nouvelles compétences..

Dans une prochaine étape, je vous encourage à examiner les points suivants:

  • Familiarisez-vous avec les méthodes de sténographie AJAX de jQuery que nous n'avons pas abordées (par exemple. $ .getJSON méthode).
  • Implémentez vos propres demandes AJAX en accédant à des fichiers statiques ou même à des données dynamiques provenant de services tiers (par exemple, Flickr).