Comunidad de diseño web y desarrollo en internet online

Problemas para pasar variables de un formulario con AJAX !!

Citar            
MensajeEscrito el 19 Ago 2008 06:32 pm
Hola:

Como bien sabemos AJAX por lo general realiza el procesamiento de los datos ya bien sobre la mismia hoja PHP donde estamos trabajando o bien sobre una nueva hoja PHP, eso dependiendo las neecsidades, pero el metodo que he optado yo es procesar las llamadas a AJAX usando una hoja php llamada AJAX.php, en esta hoja proceso todas las variales enviadas mediante el stream GET o POST, segun se indique en la misma funcion con la que llamo a AJAX.

La funcion que utilizo actualmente para procesar datos comunes e inputs/select/textarea de un formulario (vaya tipo POST) es:

SCRIPT.JS

Código :

//Funcion para obtener conector AJAX
function ajax()
   {
   var pagina=false; //conector ajax
   
   if( window.XMLHttpRequest ) //Navegador Firefox
      pagina= new XMLHttpRequest(); //creamos objeto para el navegador
   else if( window.ActiveXObject ) //Navegador Internet Explorer
      {
      try //Version Actual
         {
         pagina= new ActiveXObject( "Msxml2.XMLHTTP" ); //creamos objeto para el navegador
         }
      catch(e) //version Antigua
         {
         try
            {
            pagina= new ActiveXObject( "Microsoft.XMLHTTP" ); //creamos objeto para el navegador
            }
         catch(e)
            {
            }
         }
      }
   return pagina;
   }

//El argunmento 'vars' contiene las variables que procesara la hoja AJAX.PHP
//El argumento 'capaview' es la capa en donde escribiremos los resultados
//El argumento 'flujoddatos; indica el flujo: GET o POST
//El argumento 'varsform' posee una trama de caracteres delimitadas por un  :  (dos puntos), esta trama serian los nombres de las variables del formulario (input's, select's, textare's, etc...)
function cargar_datos( vars, capaview, flujoddatos, varsform )
   {
   var conector, capa, url;
   
   url= 'ajax.php'; //mis funciones para ajax
   capa= document.getElementById(capaview); //capa
   
   conector= ajax(); //funcion que crea el objeto ajax para el navegador
   conector.open( flujoddatos, url+'?'+vars, true ); //abrimos el flujo de datos
   conector.onreadystatechange= function() //funcion que indica estado y responde
      {
      if( conector.readyState==1 ) //cargando
         {
         capa.innerHTML= "<center><img src='imagenes/loading.gif'><br><b>CARGANDO...</b></center>";
         }
      else if( conector.readyState==4 ) //proceso completado
         {
         if( conector.status==200 ) //completado con exito
            {
            if( varsform!=0 ) //si estamos procesado variables de un formulario, establecemos Request
               conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
            capa.innerHTML= conector.responseText;
            }
         else if( conector.status==404 ) //no se encontro hoja
            {
            capa.innerHTML= "<center><img src='imagenes/404.png'></center>";
            }
         else //error
            {
            capa.innerHTML= conector.status;
            }
         }
      }

   if( varsform!=0 ) //si el argumento es distinto de 0, entonces estamos enviando trama de variables
      {
      var myarr= varsform.split(':'); //dividimos
      var trama=""; //establecemos
      var i=0; //contador de ciclo
      
      for( i=0; i<(myarr.length); i++ ) //ciclo
         {
         if( i>0 )
            trama += "&";
         trama += myarr[i]+"="+document.getElementById(myarr[i]).value;
         }

      conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); //establecemos request
      conector.send(trama); //enviamos la trama
      }
   else
      conector.send(null); //enviamos NULL en caso que solo se procesan variables normales
   }


INDEX.PHP

Código :

<html>
<head>
<title>Proceando Formulario con AJAX dentro de la hoja comun</title>
<script language="JavaScript" type="text/javascript" src="script.js"></script>
</head>

<body>
<?php
echo "<div id=\"area_box\">";

echo "<form action=\"#\" method=\"POST\" onsubmit=\"cargar_datos( 'id=saludo', 'area_box', 'POST', 'nombre:mensaje' );\" enctype=\"multipart/form-data\">";
     echo "Nombre: <input type=\"text\" name=\"nombre\" id=\"nombre\">";
     echo "Mensaje:<br>";
     echo "<textarea name=\"mensaje\" id=\"mensaje\"></textarea><br>";
     echo "<input type=\"file\" name=\"imagen\" id=\"imagen\"><br>";
     echo "<input type=\"submit\" value=\"Enviar\" onsubmit=\"cargar_datos( 'id=saludo', 'area_box', 'POST', 'nombre:mensaje' );\">";
echo "</form>";

echo "</div>";
?>
</body>
</html>


AJAX.PHP

Código :

<?php
if( !strcmp( $_GET["id"], "saludo" ) )
     {
     //gracias a la funcion de AJAX que tenemos, podremos enviar variables y tratarlas como POST directamente

     echo "Tu nombre: ". $_POST["nombre"];
     echo "<br>Tu mensaje: ". $_POST["mensaje"];
     
     //como imprimo el nombre de la imagen ??
     echo "<br>Nombre de la Imagen: ". $_FILES["imagen"]["name"];
     }
?>


CUAL ES MI PROBLEMA ??
Pues actualmente me he asurgido la necesidad de procesar un input tipo FILE, asi que no he dado con la manera correcta para procesar en AJAX un formulario pero en este caso, procesar el input file :S !!...

Alguna idea ??...

Por Diabliyo

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Ago 2008 09:04 pm
No puedes procesar la subida de archivos con AJAX, ya que solo maneja texto puro. Lo que puedes hacer es "engañar" usando un iframe para realizar esto.

Mira este sitio donde hacen algo parecido.
http://www.webtoolkit.info/ajax-file-upload.html

Saludos

Por johnx

7 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Ago 2008 10:58 pm
Orale, que bien, el codigo que me diste en tu link es exactamente lo que necesito hacer... Nomas hay un gran problema :S, no entiendo del todo dicho codigoo jojo, bueno, no es que no sepa leer codigo, pero en JS casi no me meto mucho que digamos ya que domino mas otras areas :S (php, python, c, c++, gtk+, html/css/wml)....

Nose si podrias porfavor explicarme un poquito la funcion que utilizan hay, o nose, crees que se podria hacer una adaptacion para mi codigo expuesto aqui ???...

Por Diabliyo

9 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.