Foros del Web » Programando para Internet » Javascript »

Utlizar Iframe para simular AJAX

Estas en el tema de Utlizar Iframe para simular AJAX en el foro de Javascript en Foros del Web. Hola muchach@s. Estoy queriendo hacer un formularion con algunos datos y una imagen que necesito que se guarde en el servidor. Para guardar la imagen ...
  #1 (permalink)  
Antiguo 09/11/2012, 07:20
Avatar de koolj  
Fecha de Ingreso: octubre-2011
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 1
Pregunta Utlizar Iframe para simular AJAX

Hola muchach@s.

Estoy queriendo hacer un formularion con algunos datos y una imagen que necesito que se guarde en el servidor.

Para guardar la imagen uso PHP y no hay problema , y al querer usar AJAX me encuentro que por algunos motivos no se puede y que se puede simular con un iframe.

Bueno lo pude hacer, pero me falta un detalle, no tengo idea de como hacer que el GIF que aparece cuando se envia el formulario se desaparesca cuando la imagen termine de cargarse en el servidor.

Aca les dejo el código para que lo revisen y agradeceria su ayuda

Código HTML
Código HTML:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Demo de subida</title>
<script>
function iniciar(){
    document.getElementById('carga').style.visibility = 'visible';
    return true;
}
</script>
<style type="text/css">
#carga{	
	visibility:hidden;
}
</style>
</head>

<body>
<form name="form1" method="post" action="archivos.php" enctype="multipart/form-data" target="la_otra_pagina" onSubmit="iniciar();">
  <table width="50%" border="0">
    <tr>
      <td>Nombre:</td>
      <td><input type="text" name="txtNombre" id="textfield"></td>
    </tr>
    <tr>
      <td>Foto:</td>
      <td>
      <input type="file" name="txtFoto" id="fileField"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" value="mostrar"></td>
    </tr>    
  </table>
</form>
<iframe name="la_otra_pagina" src="archivos.php" frameborder="0"></iframe>
<div id="carga"><img src="load.gif" width="220" height="19" alt="load"></div>
</body>
</html> 
Aca el archivos.php
Código PHP:
if($_POST)
    {
        
$nombre $_POST['txtNombre'];
        
$nombre_archivo $_FILES['txtFoto']['name'];        
        
$origen $_FILES['txtFoto']['tmp_name'];        
        
$destino "subidas/".$nombre_archivo;        
        
        if (
move_uploaded_file($origen,$destino))
        {
            echo 
$nombre;
               echo 
"<nr/>El archivo ha sido cargado correctamente.";            
            echo 
"<br/>".$destino;
                }
        else
        {
               echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
                }
    } 
  #2 (permalink)  
Antiguo 09/11/2012, 07:33
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Utlizar Iframe para simular AJAX

En el php si en vez de poner el mensaje de éxito pones la imagen <img> como único elemento y con el src bien puesto, queda mejor.
En el HTML del iframe tienes que poner tambien un javascript que "llame" al padre del iframe (es decir, al window de la página que contiene la etiqueta <iframe> a través de la ruta window.parent (dentro de la página que es cargada en el iframe).
  #3 (permalink)  
Antiguo 12/11/2012, 08:38
Avatar de koolj  
Fecha de Ingreso: octubre-2011
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Utlizar Iframe para simular AJAX

Cita:
Iniciado por marlanga Ver Mensaje
En el php si en vez de poner el mensaje de éxito pones la imagen <img> como único elemento y con el src bien puesto, queda mejor.
En el HTML del iframe tienes que poner tambien un javascript que "llame" al padre del iframe (es decir, al window de la página que contiene la etiqueta <iframe> a través de la ruta window.parent (dentro de la página que es cargada en el iframe).
Gracias Marlanga.

Te agradeceria que me expliques mejor lo del javascript en el iframe, no entiendo
  #4 (permalink)  
Antiguo 12/11/2012, 08:56
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Utlizar Iframe para simular AJAX

lo que marlanga quiere decir es que en el contenido del iframe, o sea donde muestras la imagen pongas tambien un bloque de javascript para que haga desaparecer la imagen de carga que tienes en el la pagina, para esto debes usar "parent" que lo que hace es hacer referencia al documento superior, por ejemplo

window.parent.laimagendecarga.style.display='none' ;
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #5 (permalink)  
Antiguo 12/11/2012, 10:07
Avatar de koolj  
Fecha de Ingreso: octubre-2011
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Utlizar Iframe para simular AJAX

Estoy haciendo lo que me dicen y no pasa nada, la imagen no se ve, sube el archivo pero la imagen no aparece. Me podrian colocar un ejemplo???
  #6 (permalink)  
Antiguo 12/11/2012, 10:15
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Utlizar Iframe para simular AJAX

Hola:

Tal vez te sirva este artículo: Revisar las imágenes antes de subirlas

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 12/11/2012, 10:17
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Utlizar Iframe para simular AJAX

wait! no habías dicho que querías hacerla desaparecer? D:

Cita:
Bueno lo pude hacer, pero me falta un detalle, no tengo idea de como hacer que el GIF que aparece cuando se envia el formulario se desaparesca cuando la imagen termine de cargarse en el servidor.
lo que te estamos diciendo es como hacerla desaparecer, si no has podido hacer que se vea entonces deberías reformular la pregunta.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #8 (permalink)  
Antiguo 12/11/2012, 11:12
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Utlizar Iframe para simular AJAX

Cita:
Iniciado por koolj Ver Mensaje
Estoy haciendo lo que me dicen y no pasa nada, la imagen no se ve, sube el archivo pero la imagen no aparece. Me podrian colocar un ejemplo???
La idea es que en tu php generes la script, ejemplo


Código PHP:
Ver original
  1. if (move_uploaded_file($origen,$destino))
  2.         {
  3. echo "
  4. <script>
  5. parent.iniciar('ok');
  6. </script>
  7. ";
  8.                 }


y en la página principal

Código Javascript:
Ver original
  1. <script>
  2. function iniciar(valor){
  3. if(valor == 'ok'){
  4. document.getElementById('carga').style.visibility = 'hidden';
  5. }
  6. }
  7. </script>

De la misma manera podés generar otros mensajes, no hace falta generar la respuesta en el propio php

Lo que no queda claro es como hacés aparecer el gif en el envío, ya que por defecto está hidden. No veo ningún evento onsubmit.

SAludos

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 12/11/2012, 14:01
Avatar de koolj  
Fecha de Ingreso: octubre-2011
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 1
De acuerdo Respuesta: Utlizar Iframe para simular AJAX

Lo logre ......................Gracias a todos en especial a emprear me sirvió mucho tu ejemplo y si te fijas bien en el formulario tiene onSubmit="iniciar();" que muestra el gif.

Bueno les dejo el código completo funcionando y de nuevo muchas gracias

La Página principal

Código HTML:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Demo de subida</title>
<script>
function iniciar(){
    document.getElementById('carga').style.visibility = 'visible';
}

function detener(valor){
	if(valor == 'stop'){
		document.getElementById('carga').style.visibility = 'hidden';
	}
}
</script>
<style type="text/css">
#carga{	
	visibility:hidden;
}
</style>
</head>

<body>
<form name="form1" method="post" action="archivos.php" enctype="multipart/form-data" target="la_otra_pagina" onSubmit="iniciar();">
  <table width="50%" border="0">
    <tr>
      <td>Nombre:</td>
      <td><input type="text" name="txtNombre" id="textfield"></td>
    </tr>
    <tr>
      <td>Foto:</td>
      <td>
      <input type="file" name="txtFoto" id="fileField"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" value="mostrar"></td>
    </tr>    
  </table>
</form>
<div id="carga"><img id="cargando" src="load.gif" width="220" height="19" alt="load"></div>
<iframe name="la_otra_pagina" src="archivos.php" frameborder="0"></iframe>
</body>
</html> 
El código]de archivos.php

Código PHP:
    if($_POST)
    {            
        
$nombre $_POST['txtNombre'];
        
$nombre_archivo $_FILES['txtFoto']['name'];        
        
$origen $_FILES['txtFoto']['tmp_name'];        
        
$destino "subidas/".$nombre_archivo;        
        if(
move_uploaded_file($origen,$destino))
        {
            echo 
'
            <script>
                parent.detener("stop");
            </script>
            '
;
        }
    } 
  #10 (permalink)  
Antiguo 12/11/2012, 14:07
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Utlizar Iframe para simular AJAX

Cita:
Iniciado por koolj Ver Mensaje
Lo logre ......................Gracias a todos en especial a emprear me sirvió mucho tu ejemplo y si te fijas bien en el formulario tiene onSubmit="iniciar();" que muestra el gif.

Bueno les dejo el código completo funcionando y de nuevo muchas gracias

La Página principal

Código HTML:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Demo de subida</title>
<script>
function iniciar(){
    document.getElementById('carga').style.visibility = 'visible';
}

function detener(valor){
	if(valor == 'stop'){
		document.getElementById('carga').style.visibility = 'hidden';
	}
}
</script>
<style type="text/css">
#carga{	
	visibility:hidden;
}
</style>
</head>

<body>
<form name="form1" method="post" action="archivos.php" enctype="multipart/form-data" target="la_otra_pagina" onSubmit="iniciar();">
  <table width="50%" border="0">
    <tr>
      <td>Nombre:</td>
      <td><input type="text" name="txtNombre" id="textfield"></td>
    </tr>
    <tr>
      <td>Foto:</td>
      <td>
      <input type="file" name="txtFoto" id="fileField"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" value="mostrar"></td>
    </tr>    
  </table>
</form>
<div id="carga"><img id="cargando" src="load.gif" width="220" height="19" alt="load"></div>
<iframe name="la_otra_pagina" src="archivos.php" frameborder="0"></iframe>
</body>
</html> 
El código]de archivos.php

Código PHP:
    if($_POST)
    {            
        
$nombre $_POST['txtNombre'];
        
$nombre_archivo $_FILES['txtFoto']['name'];        
        
$origen $_FILES['txtFoto']['tmp_name'];        
        
$destino "subidas/".$nombre_archivo;        
        if(
move_uploaded_file($origen,$destino))
        {
            echo 
'
            <script>
                parent.detener("stop");
            </script>
            '
;
        }
    } 
mil disculpas @koolj, si ahi está, no le di al scroll del code y se me pasó por alto.
Te agrego, en lugar de hacerle un hidden al div carga, podrías hacerlo un innerHTML = '"Archivo subido correctamente";

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 12/11/2012, 14:10
Avatar de koolj  
Fecha de Ingreso: octubre-2011
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Utlizar Iframe para simular AJAX

Cita:
Iniciado por emprear Ver Mensaje
mil disculpas @koolj, si ahi está, no le di al scroll del code y se me pasó por alto.
Te agrego, en lugar de hacerle un hidden al div carga, podrías hacerlo un innerHTML = '"Archivo subido correctamente";

Saludos
ok Gracias....eso estaba pensando hacer.

Etiquetas: iframe, subirarchivo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:23.