IFrames hace un transporte conveniente para las llamadas asincrónicas porque pueden cargar el contenido sin hacer la página entera recargar, y los nuevos elementos de IFrame se pueden crear usando Javascript. La cualidad más agradable sobre un IFrame es que una forma puede utilizar uno como su blanco, recargando ese IFrame en vez de la página entera; este acercamiento permite que las cantidades grandes de datos sean enviadas al servidor usando el POSTE.
|
|
Una dificultad al usar un IFrame como transporte es que la página que somos cargamento necesita ser HTML, y necesita tener un tratante del acontecimiento del onload del Javascript para decir el documento del padre cuando es cargamento hecho. Esta necesidad fuerza todas las peticiones que son hechas con IFrames que se hará a las páginas diseñadas para ocuparse de las peticiones de IFrame. (el código no puede apenas asir un archivo de XML de la manera que XMLHttpRequest permite.)
Observe que el uso de IFrames tiene un número de otras limitaciones:
Una ventaja que un IFrame tiene XMLHttpRequest excesivo es que puede ser utilizada para hacer uploads del archivo. debido a las limitaciones de la seguridad del browser, solamente acciones del usuario, tales como chascar una forma, puede obrar recíprocamente con los archivos en la máquina del usuario. Esto hace apuntar una forma a un IFrame la única opción para los uploads del archivo que no implican un ciclo normal de la recarga del POSTE y de la página de la forma. Sin embargo, no hay razón que usted no puede caerse de nuevo a usar un IFrame para los uploads del archivo y XMLHttpRequest para el resto de sus peticiones de AJAX. A menos que usted esté haciendo peticiones alejadas del scripting-estilo AJAX, el trabajo alrededor de las limitaciones de IFrame agregará una cantidad significativa de trabajo a cualquier proyecto del desarrollo de AJAX.
Para conseguir compatibilidad máxima con más viejos browsers, usted podría apenas agregar el IFrame a su HTML y darle un tamaño de 0x0. (usted no puede apenas ocultarlo, o algunos browsers no lo cargarán.) Sin embargo, este acercamiento no es flexible, así que usted deseará crear el marco dinámicamente. No todos los más viejos browsers apoyan document.createElement, pero los browsers sin esa ayuda carecerán generalmente las otras capacidades dinámicas necesitadas para utilizar los datos que usted está cargando, así que es la mejor proporcionarles la ayuda de una versión estática del HTML de la página. En el ejemplo siguiente, se crea el IFrame usando el innerHTML porque es más simple que creándolo que usa métodos de DOM. Nota, sin embargo, que podría también ser creada con document.createElement, apenas como el div a el cual se está agregando:
1 rDiv del var = document.createElement('div ');
2 rDiv.id = ' remotingDiv ';
estilo de 3 var = ' border:0;width:0;height:0;';
4 rDiv.innerHTML = "";
6
7 document.body.appendChild(rDiv);
Si usted desea hacer solamente una petición del CONSEGUIR, usted puede cambiar el valor de la característica del src del IFrame, pero hacer el POSTE, usted necesita utilizar una forma apuntada. CONSIGA no es una buena solución para los pedidos de AJAX dos razones: puede enviar solamente una cantidad limitada de datos (una cantidad que cambien dependiendo del browser), y CONSIGUE puede ser depositado y/o ser cargado por los servidores del poder, así que usted nunca desea utilizarlo para realizar una acción tal como puesta al día de su base de datos.
Usar una forma con un IFrame es fácil. Justo el sistema la cualidad de la blanco de la forma, y cuando usted somete la forma, el resultado carga en el IFrame. El ejemplo siguiente crea nuestra forma y fija sus blancos al IFrame que creamos anterior en "crear la sección de un IFrame ocultado" del artículo:
1 rDiv.form = document.createElement('form ');
2 rDiv.form.setAttribute('id ', id+'RemotingForm ');
3 rDiv.form.setAttribute('action ', URL);
4 rDiv.form.setAttribute('target ', identificación);
5 rDiv.form.target = identificación;
6 rDiv.form.setAttribute('method ', ' poste ');
7 rDiv.form.innerHTML = '
8 id="'+id+'Data" > ';
La única manera de saber que el contenido del IFrame ha cargado es tener la página contenta funciona un cierto Javascript que notifique la página del padre en la cual se encaja el IFrame. La manera más simple de hacer esto es fijar al tratante del acontecimiento del onload en el documento que usted está cargando. Esta limitación significa que usted no puede utilizar un IFrame para el contenido arbitrario del cargamento como usted puede con XMLHttpRequest. Sin embargo, sigue siendo útil para los casos en los cuales una sola página del servidor se está utilizando ya como entrada de AJAX. Aquí está un ejemplo del onload:
Un ejemplo completo de un IFrame que AJAX solicite incluye dos pedazos. El primer pedazo es el código del cliente-lado para crear el IFrame y la forma. El segundo pedazo es el código del servidor-lado, que elabora un ciertos datos y los envía de nuevo al documento del padre en su tratante del acontecimiento del onload.
La primera parte del ejemplo (el listado 1) es el código del Javascript en un archivo simple del HTML. Esta página se utiliza para probar; la función del servicio repetido apenas alerta el contenido de los resultados. La segunda parte del ejemplo (el listado 2) es una escritura simple de PHP, que toma los datos del POSTE y los envía de nuevo al documento del padre. Para hacer un sistema útil, usted puede ser que también desee incluir algunas variables adicionales en la forma, que diría a código de PHP qué hacer con los datos uploaded, o usted podría poner la lógica directamente en la escritura y utilizar una diversa página de la blanco para cada tarea que usted deseó lograr.
Enumerar 1. Fabricación de una petición de AJAX usando un IFrame
| 1 2 3 50 51 52 53 54 prueba 55 56 57 58 |
Enumerar 1 se compone de tres funciones:
La función del createRemotingDiv (líneas 5 - 28) combina el código previamente descrito para crear un IFrame ocultado con el código para crear una forma para someter a ella. Cuando se crea la forma, se apunta contra el IFrame nuevamente creado, haciéndola el uso de la sumisión de la forma en vez de recargar la página actual. Demostrar el IFrame durante el desarrollo es a menudo útil en el proceso el eliminar errores de modo que usted pueda ver cualquier salida generada por la página que usted está llamando. Usted puede hacer esto corrigiendo el estilo en la línea 8 y cambiándolo a width:200;height:200;.
La función ma's sendRequest (líneas 30 - 40) hace una petición de AJAX. Toma el URL a el cual hacer la petición, una carga útil de enviar al servidor, y una función del servicio repetido al funcionamiento cuando la petición es completa. La función utiliza el createRemotingDiv para instalar el proceso (líneas 31-34). Entonces las actualizaciones ma's sendRequest la acción en la forma de IFrame (línea 35), agregan el valor de la carga útil en la forma, y someten la forma usando el IFrame. Cuando la página nueva se carga en el IFrame, el nuevo documento utiliza a tratante del onload del Javascript para llamar la función del servicio repetido que fue pasada en el método ma's sendRequest. La página de PHP que procesa el POSTE de la forma y crea el Javascript del onload se demuestra en el listado 2
Enumerar 2. Página del servidor de PHP que maneja una petición de IFrame AJAX
| 1 2 3 8 9 onload 10 = 11 "parent.document.getElementById('remotingDiv').callback(result)" > 12 13 |
En el lado del servidor, se procesa la forma y la salida se crea en la forma de un HTML page. La manera más simple de agregar nuevos datos es generar el Javascript que contiene los nuevos datos. En este caso, somos justos repitiendo los datos de nuevo al cliente poniéndolo en la variable del resultado (líneas 4-6). Normalmente, usted será código corriente del servidor-lado aquí y haciendo salir una secuencia (como en este caso) o agregando nuevo código del Javascript al funcionamiento contra el documento del padre. La función del servicio repetido en el padre es llamada por el tratante del onload en la etiqueta del cuerpo (línea 11).
Online: 565 users browsing the articles directory
|
|