2016-06-21 1 views
0

J'apprends sur le cas pour la définition du module asynchrone (AMD) à partir here mais je suis pas tout à fait clair sur le ci-dessous: pour charger les scriptsComment XHR est-il une alternative viable à la définition de module asynchrone?

Il est tentant d'utiliser XMLHttpRequest (XHR). Si XHR est utilisé, alors nous pouvons masser le texte ci-dessus - nous pouvons faire une expression rationnelle à trouver des appels require(), nous assurer que nous chargeons ces scripts, puis utiliser eval() ou des éléments de script qui ont leur corps de texte au texte du script chargé via XHR.

XHR utilise ajax ou quelque chose pour faire un appel pour récupérer une ressource de la base de données, correct? Qu'est-ce que les éléments eval() ou script ont à voir avec cela? Un exemple serait très utile

Répondre

1

Cette partie de la documentation de RequireJS explique pourquoi utiliser XHR plutôt que de faire ce que RequireJS fait est problématique.

XHR utilise ajax ou quelque chose pour faire un appel pour récupérer une ressource de la base de données, correct?

XHR est ce qui vous permet de faire un appel Ajax. Par exemple, $.ajax de jQuery crée une instance XHR pour vous et l'utilise pour effectuer la requête. La réponse du serveur dépend de la conception du serveur. La plupart des serveurs que j'ai développés n'utiliseront pas une base de données pour répondre à une requête faite à une URL qui correspond à un fichier JavaScript. Le fichier est simplement lu à partir du système de fichiers et renvoyé au client.

Qu'est-ce que les éléments eval() ou script ont à voir avec cela?

Une fois la requête terminée, vous disposez d'une chaîne contenant du code JavaScript. Vous avez récupéré le code de votre module mais vraisemblablement vous aussi voulez l'exécuter. eval est une façon de le faire mais il présente les inconvénients mentionnés dans la documentation. Une autre façon de le faire serait de créer un élément script dont le corps est le code que vous avez récupéré, puis d'insérer ce script dans le DOM mais cela pose aussi des problèmes, comme expliqué dans la documentation à laquelle vous faites référence.