La aplicación de la clase en el Ajax Asynchronous

Después de haber decidido XMLHttpRequests asincrónica son el camino a seguir, se define la clase de encapsulación asincrónica. Una clase de encapsulación no es necesario, pero lo hace más sencillo trabajar con el objeto XMLHttpRequest. La principal ventaja de utilizar una clase de encapsulación es la asociación del objeto XMLHttpRequest con un bloque de código. Para un repaso, veamos el código para cargar un feed Atom de nuevo:

función LoadAtomFeed () (var = asincrónica asincrónico nuevo (); asynchronous.settings = (onComplete: function (xmlhttp) (parseAtom (xmlhttp.responseXML); flexbox.update ();)) asynchronous.get ( "/ servicios / blog / entradas y actual ");)
  

Para hacer el trabajo de la clase asíncrona, el usuario necesita hacer dos cosas: el miembro de datos asociado con algunos ajustes de la información y llamar a un método adecuado (por ejemplo, obtener) para hacer una petición HTTP. El propósito de la configuración de los miembros de datos para las devoluciones de llamada y la información adicional asociada a una solicitud. En el ejemplo, el onComplete método se llama una vez que la petición HTTP se ha completado.

El código como está, es bastante fácil de entender, pero recuerde que el código es asincrónica. Como resultado, cuando el método asynchronous.get se llama, la función LoadAtomFeed va a salir antes de llamar a onComplete y devolver el control al usuario. En el peor de los casos, si un usuario haga clic en va-loco, podría haber decenas de solicitudes que se hacían. La alternativa es utilizar las llamadas sincrónicas, que bloquea el navegador, y que en sí no es una opción. En el lado positivo, el comportamiento asincrónico permite a un usuario para iniciar las tareas y esperar a los resultados. El programador tiene que permanecer alerta y asegurarse de que el usuario no ir por delante de él o ella misma. Ahora que tiene una comprensión básica de cómo utilizar la clase asíncrona, echemos un vistazo a los detalles de la ejecución asíncrona. La clase expone un método para cada verbo HTTP, y en el ejemplo el método GET se corresponde con el verbo HTTP GET. La aplicación de obtener es el siguiente:

función HttpRequest_get (strURL) (this.call ((acción: "GET", url: strURL));)

En la aplicación de HttpRequest_get, que se asigna a Asynchronous.get, una referencia a la llamada a la función que se haga. La función es conseguir un método de conveniencia para el método de llamada. La llamada al método acepta un único parámetro: un objeto con miembros específicos de datos. En el caso del método GET, se definen las medidas y la URL de los miembros de datos. Entonces ¿por qué crear un objeto, cuando se podría haber utilizado dos parámetros, la acción y la URL, por la llamada al método? La respuesta es la flexibilidad. JavaScript no entender las funciones sobrecargadas, y que sólo puede haber una sola función, con un único conjunto de parámetros. De modo que el desarrollador no tiene que jugar el juego de permutaciones y combinaciones con los parámetros (por ejemplo, qué parámetros, qué orden, etc), se crea un objeto con los miembros de datos.

El método más importante de asíncrona es llamada, porque a pesar de que verbo HTTP se utiliza, se ejecuta el método. El código siguiente es la aplicación completa de la llamada.

 Fuente: 

Ahora voy a explicar el método de llamada desde el principio al fin, y voy a reiterar las piezas clave de las empresas, con algunas reiteraciones abreviado. Puedo mostrar el código de nuevo en su caso para facilitar su comprensión, como la aplicación de la llamada es relativamente larga y hace muchas cosas diferentes. Comenzando por el principio, la variable se le asigna valor a la siguiente: var ejemplo = this; Esta cesión es necesaria debido a que un bloque de código se asignará al miembro de datos onreadystatechange, y el bloque de código tiene que recordar qué instancia asíncrona es que se hace referencia. Después de la cesión, verificamos que el miembro de datos de configuración se ha rellenado:

if (! this.settings) (throw new error ( "Configuración no está definida");)

El miembro de datos de configuración tiene que existir, ya que contiene información acerca de los métodos para llamar cuando la solicitud se ha completado y que cabeceras HTTP para agregar a la solicitud. En este punto, usted debe notar que dos objetos tienen la obligación de hacer que el método de llamada. El primer objeto es la configuración, y el segundo objeto es el parámetro de la petición. Como un atajo, un desarrollador podría combinar los dos objetos en uno solo, y, o bien pasar a la llamada al método o asignar a los miembros de los ajustes de datos. Este atajo sería un error, porque cada objeto tiene un propósito diferente.

El objeto de solicitud se utiliza para definir los ajustes para la solicitud de URL específica que se hizo. La configuración de objeto se utiliza para definir los ajustes que trascienden todas las llamadas y podría ser una considerada una devolución de llamada mundial para la instancia del objeto asincrónico. La idea es que se puede asignar una instancia de Asynchronous, definir cómo debe comportarse, y luego empezar a hacer las peticiones con la posibilidad de llamar a diferentes URL. Luego, el siguiente paso es comprobar que la instancia XMLHttpRequest actual no está preocupado:

if (this.xmlhttp.readyState! = 4 & & this.xmlhttp.readyState! = 0) (throw new error ( "solicitud activos actualmente no puede continuar");)
 

Cuando se utiliza XMLHttpRequest en modo asíncrono, es posible hacer una nueva petición HTTP en una instancia XMLHttpRequest de ejecución. El problema es que XMLHttpRequest no puede servir a dos peticiones, y se detendrá la solicitud ya la ejecución de hacer una nueva solicitud. La propiedad readyState se utiliza para indicar el estado del objeto XMLHttpRequest. Si readyState es 0, entonces no se ha solicitado y una solicitud HTTP se pueden hacer. Si readyState es de 4, una solicitud ha sido hecha, la solicitud ha concluido, y el objeto está dispuesta a hacer otra petición. ReadyState Si tiene cualquier otro valor, la solicitud está siendo ejecutado, por lo que ejecutar otra solicitud no tiene sentido. Después de la inicialización y control, ha concluido, es posible hacer una petición: this.xmlhttp.open (request.action, la solicitud . url, es cierto, this.settings.username, this.settings.password), se llama al método abierto, es necesario especificar en la aminimum verbo HTTP (por ejemplo, GET, POST) a través del miembro de datos request.action y la URL a través de el miembro de datos request.url. Siempre que se realice cualquier petición XMLHttpRequest, asegúrese de que la primera acción es el método abierto. Si se asigna la función de onreadystatechange antes de llamar abierta, su petición no funcionará correctamente. Si se intenta asignar las cabeceras de solicitud antes de llamar abierta, su petición no funcionará correctamente. El método abierto se utiliza para inicializar y crear una nueva solicitud; abierta no llamar al servidor, ya que es la responsabilidad de enviar.

En el ejemplo de método abierto, un nombre de usuario y contraseña (this.settings.username y this.settings.password, respectivamente), siempre se envían al servidor, incluso si no hay nombre de usuario y contraseña. No hace ningún daño a enviar valores nulos, y no va a afectar el funcionamiento de una petición HTTP. El nombre de usuario y la contraseña se utiliza sólo cuando el servidor HTTP realiza un desafío y le pide un nombre de usuario y contraseña. En el contexto del objeto XMLHttpRequest, el nombre de usuario y contraseña se usan sólo si la aplicación subyacente de XMLHttpRequest necesita la información. Después de haber abierto la solicitud, podrás añadir cabeceras HTTP usando el método setRequestHeaders:

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]);))

Las cabeceras se asignan dos veces: una para los ajustes asociados con la solicitud (request.headers) y una vez para la configuración global (this.settings.headers). Las cabeceras que se pueden asignar encabezados HTTP estándar o cabeceras personalizadas. Si usted planea usar las cabeceras HTTP personalizado, siempre es una buena idea el prefijo con-X. De esta forma, las cabeceras no se debe confundir con el estándar de cabeceras HTTP. Después de que hayas asignado las cabeceras, se le asigna la función de llamada onreadystatechange:

this.xmlhttp.onreadystatechange = function () (switch (instance.xmlhttp.readyState) (case 1: if (instance.settings.onLoading) (instance.settings.onLoading (instance.xmlhttp);) case 2: if ( instance.settings.onLoaded) (instance.settings.onLoaded (instance.xmlhttp);) case 3: if (instance.settings.onInteractive) (instance.settings.onInteractive (instance.xmlhttp);) case 4: if (instance.settings.onComplete) (try (instance.settings.onComplete (instance.xmlhttp);) catch descanso (e);)) (e) (globals.errorHandler;)

En la ejecución asíncrona de onreadystatechange, una sentencia switch se ejecuta uno de los cuatro estados válidos listo. De la fuente, se puede asociar cada número con un estado específico. El estado listo más importante es el 4, lo que indica que el contenido se ha recuperado, cargado, y procesados. El 4 estado listo llama al método definido por el cliente en la configuración de la propiedad. Observe en la aplicación de la función asignada onreadystatechange que la variable de instancia ha sustituido la referencia a la presente.

La aplicación de la función onreadystatechange es excesivo, el 98% de las veces se utiliza Asynchronous sólo se preocupan por el estado de la lista 4. Para todos los demás Estados listo, dependiendo del navegador, cierta funcionalidad es posible. Debido a esta incompatibilidad y el carácter incompleto del estado del objeto XMLHttpRequest, no hay necesidad real de proceso de los demás Estados listo. El resto de código de llamada de función consiste en enviar la solicitud al servidor mediante la función de envío:

try (this.xmlhttp.send (request.data);) catch (e) (globals.errorHandler (e);)

La función de envío se utiliza para hacer la solicitud física para el servidor. La función también se utiliza para enviar todos los datos asociados con la petición. Si no hay datos, y luego llamar a enviar con valor nulo no generará un error. Cuando el método de envío ha hecho su petición, devuelve inmediatamente, y la función de JavaScript Asynchronous_call devolverá el control al navegador. En este momento, el cliente debe agregar algo de código para no permitir que varias llamadas. Por ejemplo, si la solicitud se activa mediante el botón, a continuación, hasta que la solicitud ha regresado, el botón puede estar desactivado. Por supuesto, esto presenta un problema potencial si la petición no vuelve nunca y el botón permanece desactivado. Para solucionar este problema, puede introducir un temporizador que da a la solicitud de una cantidad máxima de tiempo. Si durante ese tiempo, la solicitud aún no ha regresado, el método se llama XMLHttpRequest.abort y el botón se activa de nuevo.

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 así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: 249 users browsing the articles directory