Maison > Article > développement back-end > Explication détaillée de l'exemple de code de la technologie d'encapsulation d'objet XMLHTTP
L'implémentation de la technologie ajax repose principalement sur xmlhttprequest, mais lorsque nous l'appelons pour une transmission de données asynchrone, puisque xmlhttp est un processus à court terme (il sera détruit après le traitement de l'événement), si l'objet n'est pas empaqueté, il devra être traité dans Reconstructing xmlhttprequest où il doit être appelé nécessite d'écrire une grande section de code pour chaque appel, ce qui n'est vraiment pas une bonne idée. Heureusement, de nombreux frameworks ajax open source proposent désormais des solutions pour encapsuler XMLhttp. Ici, nous utilisons le prototype-1.4.0.js fourni avec ajaxtags comme maître pour voir comment encapsuler l'objet xmlhttp dans une méthode réutilisable.
Dans prototype.js, une variable est d'abord définie : Ajax
var Ajax = { getTransport: function() { return Try.these( function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')}, function() {return new XMLHttpRequest()} ) || false; }, activeRequestCount: 0 }
La variable renvoie une requête xmlhttp Vous pouvez voir cela si on appelle Ajax.getTransport(), à chaque fois Un nouveau. L'objet xmlhttprequest sera renvoyé.
Une méthode de base Ajax.Base et le prototype de la méthode de base sont définis dans la variable Ajax (initialement, chaque méthode de script a par défaut un prototype vide, qui héritera du prototype d'Object. Si on Si le le prototype est modifié dans Object, toutes les méthodes de script seront modifiées) Cette méthode de base est héritée par Ajax.Request. Notez que si la méthode ou la variable du prototype hérité portant le même nom est renseignée dans Ajax.Request, elle sera modifiée. .
La chose la plus importante dans le prototype Ajax.Base est la méthode setOptions, que nous utiliserons plus tard.
setOptions: function(options) { this.options = { method: 'post', asynchronous: true, parameters: '' }
La requête dans le prototype est implémentée en définissant le prototype Ajax.Request (Ajax.Request.prototype). Mais nous ne pouvons pas appeler directement Ajax.Request. La raison principale est qu'Ajax.Request ne fournit pas de processus de traitement unifié. Et nous devrons peut-être obtenir la réponse via la demande. (Imaginez que le client envoie un message mais n'ait jamais reçu de réponse. Ce serait très ennuyeux ~) Le prototype encapsule également la réponse (Ajax.Responders) pour nous, mais les deux sont indépendants l'un de l'autre. Comment les intégrer ?
nous propose deux solutions dans le prototype, l'une est Ajax.Updater et l'autre est Ajax.PeriodicalUpdater. Les deux ont en commun que 3 paramètres doivent être passés dans :
conteneur :<.>
La position où les données de réponse doivent être transmises. La position est définie par l'identifiant de la balise html. Par exemple, si vous souhaitez afficher les données renvoyées vers un/*表单提交用post方法*/ function doRequest(container,paraments,url){ var options ={ method: 'post', asynchronous: true, postBody: paraments }; new Ajax.Updater(container,url,options); }Enfin. Je dois dire que c'est un problème d'encodage chinois. Le prototype effectue une conversion d'encodage sur les paramètres transmis, et chaque valeur transmise est traitée via encodeURIComponent. L'encodage sera converti en utf-8 Lors de l'obtention de la requête en arrière-plan, vous devez utiliser uniformément request.setCharacterEncoding("UTF-8") pour définir l'encodage de la requête, quel que soit le format d'encodage de la page. Si vous utilisez la méthode post pour transférer des données, elle exécutera automatiquement : requête. setHeader('Content-type','application/x-www-form-urlencoded'). Assurez-vous que le format de codage des données transmises est correct.
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!