Implémentation de la classe synchrone à Ajax

  

Une autre solution consiste à utiliser la version synchrone du XMLHttpRequest. Pour la plupart, je utiliser le mode asynchrone, mais il ya des moments où le mode synchrone est plus appropriée. Article 1-3 présente un exemple dans lequel le test ne peut pas continuer tant que la page Ajax a fini de charger son contenu. Pour mettre en œuvre une version synchrone de asynchrone, seule la méthode d'appel doit être adapté tout le reste peut rester tel quel. Par exemple, pour convertir le code client initial pour utiliser le mode synchrone, vous pouvez utiliser le code suivant:

LoadAtomFeed fonction () (var = new synchrone Synchrone(); Synchronous.settings = (onComplete: function (xmlhttp) (parseAtom (xmlhttp.responseXML); flexbox.update ();)) synchronous.get ( "/ services / nouveaux commentaires / / current");)

Le code en gras correspond à la seule modification majeure: au lieu de l'instanciation asynchrone, il instancie synchrone. Vous fournissez toujours un bloc de paramètres de code, et vous appelez toujours le faire fonctionner. La raison de cette approche fonctionne est due à la façon dont asynchrones et synchrones sont connectés ensemble, comme l'illustre le code suivant:

Asynchronous fonction (UserSettings) (this.xmlhttp = new FactoryXMLHttpRequest (); this.isBusy = false; this.userSettings = UserSettings;) Asynchronous.prototype.get = HttpRequest_get; Asynchronous.prototype.put = HttpRequest_put; Asynchronous.prototype.del = HttpRequest_delete; Asynchronous.prototype.post = HttpRequest_post; Asynchronous.prototype.call = Asynchronous_call; Fonction synchrone (UserSettings) (this.xmlhttp = new FactoryXMLHttpRequest (); this.isBusy = false; this.userSettings = UserSettings;) Synchronous.prototype.get = HttpRequest_get; Synchronous.prototype.put = HttpRequest_put; Synchronous.prototype.del = HttpRequest_delete; Synchronous.prototype.post = HttpRequest_post; Synchronous.prototype.call = Synchronous appel;

Le code de gras correspond à la seule modification dans chaque classe. Notez que cette façon de définir une classe utilise un contrat. Chaque type a cinq fonctions: get, put, del, poste, et l'appel. Les quatre fonctions get, put, del, et après pourrait être considéré comme un module et considéré comme un mixin. Chacune des quatre fonctions ajoute de la valeur d'une certaine façon, mais s'appuie sur un contrat où le type contient un appel de méthode. La méthode d'appel est ce qui varie sur le type asynchrone et synchrone, puisque chacun a une application unique. La mise en œuvre appel synchrone est la suivante.

 Source: / client / scripts / jaxson / communications.js fonction Synchronous_call (request) (var instance = this; this.xmlhttp.open (request.action, request.url, faux, this.settings.username, this.settings.password); if (Request.Headers) (for (defHeader dans Request.Headers) (this.xmlhttp.setRequestHeader (defHeader, Request.Headers [defHeader]);)) if (this.settings.headers) (for (defHeader dans this.settings . headers) (this.xmlhttp.setRequestHeader (defHeader, this.settings.headers [defHeader]);)) try (this.xmlhttp.send (request.data); if (instance.settings.onComplete) (instance.settings. onComplete (instance.xmlhttp);)) catch (e) (globals.errorHandler (e);))

Sans entrer dans trop de détails, vous pouvez voir que les implémentations sont très similaires. La seule différence réelle est que onComplete appelant après l'appel de la méthode Send imite l'appel asynchrone du bloc de code onComplete. En mode synchrone, après la méthode Send renvoie, l'état de XMLHttpRequest est valide et demandant onComplete est correcte.

un article présenté par Sonja Lande


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article «Implémentation de la classe synchrone en Ajax" a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 326 users browsing the articles directory