La aplicación de la Clase sincrónica en Ajax
Otra posible solución es utilizar la versión sincrónica de XMLHttpRequest. En su mayor parte, yo uso el modo asincrónico, pero hay momentos en modo síncrono es más apropiado. Artículo 1.3 se presenta un ejemplo en que la prueba no puede continuar hasta la página de Ajax ha terminado de cargar su contenido. Para llevar a cabo una versión sincrónica de Asynchronous, sólo la llamada al método debe adaptarse todo lo que puede permanecer como está. Por ejemplo, para convertir el código de cliente inicial para utilizar el modo sincrónico, puede utilizar el siguiente código: función LoadAtomFeed () (var = new síncrono Síncrono(); Synchronous.settings = (onComplete: function (xmlhttp) (parseAtom (xmlhttp.responseXML); flexbox.update ();)) synchronous.get ( "/ servicios / entradas de blog / / current");) El código en negrita se muestra el único cambio importante: en lugar de crear instancias de asíncrono, crea una instancia síncronos. Aún ofrecer un bloque de código de configuración, y aún llamar a la función get. La razón de este enfoque funciona se debe a la forma en que asincrónicos y sincrónicos están interconectados, como lo ilustra el siguiente código: Asynchronous función (UserSettings) (this.xmlhttp = FactoryXMLHttpRequest nuevo (); 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; La función síncrona (UserSettings) (this.xmlhttp = FactoryXMLHttpRequest nuevo (); 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 = Llamada sincrónica; El código en negrita muestra el cambio individual en cada clase. Observe que esta manera de definir una clase usa un contrato. Cada tipo tiene cinco funciones: recibe, poner, del, de correos y llamadas. Las cuatro funciones get, put, del, y después se podría considerar un módulo y pensado como un mixin. Cada una de las cuatro funciones de valor añadido de alguna manera, pero se basa en un contrato cuando el tipo contiene un método de llamada. El método de llamada es lo que varía en los tipos síncronos y asíncronos, como cada uno tiene una aplicación única. La aplicación llamada sincrónica es la siguiente. Fuente: / cliente / scripts / Jaxson / communications.js función Synchronous_call (solicitud) (var = esta instancia; this.xmlhttp.open (request.action, request.url, falso, this.settings.username, this.settings.password); if (request.headers) (for (defHeader en request.headers) (this.xmlhttp.setRequestHeader (defHeader, request.headers [defHeader]);)) if (this.settings.headers) (for (defHeader en this.settings . cabeceras) (this.xmlhttp.setRequestHeader (defHeader, this.settings.headers [defHeader]);)) try (this.xmlhttp.send (request.data), si (instance.settings.onComplete) (instance.settings. onComplete (instance.xmlhttp);)) catch (e) (globals.errorHandler (e);)) Sin entrar en demasiados detalles, se puede ver que las implementaciones son muy similares. La única diferencia real es que llamar onComplete después de llamar al método Send imita la llamada asincrónica del bloque de código onComplete. En el modo síncrono, después de que el método Send devuelve, el estado de XMLHttpRequest es válida y llamando onComplete es correcta. un artículo presentado por Sonja Lande Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito. Importante: Este artículo "Implementación de la clase síncrona en Ajax" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.
|
|||||
| Online: 305 users browsing the articles directory |
|
|