Implementando a Classe Síncrona em Ajax

  

Outra possível solução é usar a versão síncrona de XMLHttpRequest. Para a maior parte, eu uso o modo assíncrono, mas há momentos em modo síncrono é mais adequado. 1-3 artigo apresenta um exemplo em que o teste não pode continuar até que a página Ajax terminar de carregar o seu conteúdo. Para implementar uma versão do Synchronous Asynchronous, apenas o método de chamada deve ser adaptado tudo pode ficar como está. Por exemplo, para converter o código de cliente inicial para usar o modo síncrono, você pode usar o seguinte código:

LoadAtomFeed function () (var = new síncrona Synchronous(); Synchronous.settings = (onComplete: function (xmlhttp) (parseAtom (xmlhttp.responseXML); flexbox.update ();)) synchronous.get ( "/ serviços / blog / entradas / current");)

O código em negrito mostra a única grande mudança: ao invés de instanciar Asynchronous, Synchronous ele instancia. Você ainda fornecer um bloco de código configurações, e você ainda chamada a função get. A razão que esta abordagem funciona é devido à forma síncrona e assíncrona, que estão ligados entre si, como ilustra o seguinte código:

Asynchronous função (userSettings) (this.xmlhttp FactoryXMLHttpRequest = new (); 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; Função síncrona (userSettings) (this.xmlhttp FactoryXMLHttpRequest = new (); 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 = Chamada síncrona;

O código em negrito mostra a única mudança em cada classe. Observe que esta forma de definir uma classe usa um contrato. Cada tipo tem cinco funções: get, put, del, correio, e chamada. As quatro funções GET, PUT, del, e depois poderia ser considerado um módulo e pensado como um mixin. Cada uma das quatro funções agrega valor de alguma forma, mas depende de um contrato em que o tipo contém um método chamado. A chamada de método é o que varia de acordo com os tipos síncrona e assíncrona, como cada um tem uma aplicação única. A aplicação chamada síncrona é a seguinte.

 Fonte: / cliente / scripts / Jaxson / communications.js função Synchronous_call pedido () (var instance = this; this.xmlhttp.open (request.action, request.url, false, this.settings.username, this.settings.password); if (Request.Headers) (for (defHeader em Request.Headers) (this.xmlhttp.setRequestHeader (defHeader, Request.Headers [defHeader]);)) if (this.settings.headers) (for (defHeader em 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);))

Sem entrar em muitos detalhes, você pode ver que as implementações são muito semelhantes. A única diferença real é que chamar onComplete após chamar o método enviar imita a chamada assíncrona do bloco de código onComplete. No modo síncrono, após enviar o método retorna, o estado de XMLHttpRequest é válido e chamando onComplete está correto.

um artigo submetido por Sonja Lande


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Implementação da Classe Síncrona em Ajax" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 322 users browsing the articles directory