Retroceder   Foros del Web > Programación para sitios web > AJAX

Respuesta
 
Herramientas Desplegado
Antiguo 07-abr-2008, 09:35   #1 (permalink)
Henkka ha deshabilitado el karma
 
Avatar de Henkka
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Enviar formulario por AJAX

Saludos, es mi primer post, una lástima que sea preguntando y no ayudando, pido disculpas .

Llendo al grano, lo que quiero hacer es que al enviar la form login los datos se transmitan a member.php por POST a través de AJAX, y que el resultado se cargue en el div contenido.

Este es el contenido HTML:

Código PHP:
<div id="contenido">
        <
form id="login" action="#">
            <
fieldset>
            <
legend>Por favoridentif&iacute;quese</legend>
            <
p><label for="name">Usuario</label> <input type="text" name="username" id="name" /></p>
            <
p><label for="pass">Contraseña</label> <input type="password" name="passwd" id="pass" /></p>
            <
class="submit"><input type="button" value="Ingresar" 
                    
onclick="enviarFormulario('member.php','login');"/></p>
            </
fieldset>
        </
form>
</
div
Y este es el javascript:

Código PHP:
function enviarFormulario(urlformid){
    
alert('1');
        var 
Formulario document.getElementById(formid);
        var 
longitudFormulario Formulario.elements.length;
        var 
cadenaFormulario "";
        var 
sepCampos;
        
sepCampos "";
        for (var 
i=0<= Formulario.elements.length-1;i++) {
            
cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value);
            
sepCampos="&";
    }
    
peticion.open("POST"urltrue);
    
peticion.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=ISO-8859-1');
    
peticion.send(cadenaFormulario);
    if (
peticion.readyState == && (peticion.status == 200 || window.location.href.indexOf ("http") == - 1)){
        
alert('2');
        
document.getElementById('contenido').innerHTML peticion.responseText;

    }
    
alert('3');

Tiene puestos 3 alerts para ver hasta que parte se ejecuta, pero solo me alerta el primero .

Soluciones?
Henkka está desconectado   Responder Citando
Antiguo 07-abr-2008, 11:38   #2 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: Enviar formulario por AJAX

Hola henka,

Para procesar AJAX es de manera asíncrona así que debes de usar el evento onreadystatechange:
Código:
function enviarFormulario(url, formid){
    alert('1');
        var Formulario = document.getElementById(formid);
        var longitudFormulario = Formulario.elements.length;
        var cadenaFormulario = "";
        var sepCampos;
        sepCampos = "";
        for (var i=0; i <= Formulario.elements.length-1;i++) {
            cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value);
            sepCampos="&";
    }
    peticion.open("POST", url, true);
    peticion.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
    peticion.send(cadenaFormulario);
    peticion.onreadystatechange = function() {
          if (peticion.readyState == 4 && (peticion.status == 200 || window.location.href.indexOf ("http") == - 1)){
                alert('2');
                document.getElementById('contenido').innerHTML = peticion.responseText;
          }
    }
}
Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 08-abr-2008, 12:16   #3 (permalink)
Henkka ha deshabilitado el karma
 
Avatar de Henkka
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Re: Enviar formulario por AJAX

Lo probé, pero sigue sin funcionar.

Hice un archivo de prueba, con todos los datos en una misma, y simplifiqué la form (sin adornos):

Código PHP:
<html>
<
head>
<
title>Prueba de AJAX y forms</title>
<
SCRIPT LANGUAGE=JavaScript>
function 
enviarFormulario(urlformid){
        var 
Formulario document.getElementById(formid);
        var 
longitudFormulario Formulario.elements.length;
        var 
cadenaFormulario "";
        var 
sepCampos;
        
sepCampos "";
        for (var 
i=0<= Formulario.elements.length-1;i++) {
            
cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value);
            
sepCampos="&";
    }
    
peticion.open("POST"urltrue);
    
peticion.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=ISO-8859-1');
    
peticion.send(cadenaFormulario);
    
peticion.onreadystatechange = function() {
          if (
peticion.readyState == && (peticion.status == 200 || window.location.href.indexOf ("http") == - 1)){
                
alert('2');
                
document.getElementById('contenido').innerHTML peticion.responseText;
          }
    }
}
</script>
</head>
<body>
<div id="contenido">
        <form id="login" action="#">
        Por favor, identif&iacute;quese
        <input type="text" name="username" id="name" />
        <input type="password" name="passwd" id="pass" />
        <input type="button" value="Ingresar" 
                    onclick="enviarFormulario('member.php','login');"/>
        </form>
</div>  
</body>
</html> 
Henkka está desconectado   Responder Citando
Antiguo 10-abr-2008, 08:04   #4 (permalink)
jonathan_miguel ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Ubicación: Argentina
Mensajes: 47
Enviar un mensaje por MSN a jonathan_miguel
Re: Enviar formulario por AJAX

Te hago una pregunta, la variable peticion donde la definiste??
El error que tiene tu pagina de prueba es que la variable peticion no esta definida, entonces cuando ejecuta "peticion.open(...);" tira un error, el resto esta todo bien.
Te recomiendo para trabajar con Ajax de separar la recepcion de datos (en este caso levantar los datos del form) con las instancias Ajax como ser open,send y lo principal new XMLhttp...
Nada mejor que una buena clase que tenga todas las instancias hechas, te presento una llamada "Ajaxsa" www.jomico.com.ar/Librerias/Ajaxsa que es simple, liviana y codigo abierto.

Espero que haya sido de utilidad.
jonathan_miguel está desconectado   Responder Citando
Antiguo 10-abr-2008, 11:49   #5 (permalink)
Henkka ha deshabilitado el karma
 
Avatar de Henkka
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Re: Enviar formulario por AJAX

Cita:
Iniciado por jonathan_miguel Ver Mensaje
Te hago una pregunta, la variable peticion donde la definiste??
El error que tiene tu pagina de prueba es que la variable peticion no esta definida, entonces cuando ejecuta "peticion.open(...);" tira un error, el resto esta todo bien.
Te recomiendo para trabajar con Ajax de separar la recepcion de datos (en este caso levantar los datos del form) con las instancias Ajax como ser open,send y lo principal new XMLhttp...
Nada mejor que una buena clase que tenga todas las instancias hechas, te presento una llamada "Ajaxsa" www.jomico.com.ar/Librerias/Ajaxsa que es simple, liviana y codigo abierto.

Espero que haya sido de utilidad.
Por dios, que tonto fuí, llamaba a abrir la conección cuando ni siquiera estaba definida .

Lo que hice fue crear la función que conecta por XML, y agregar la linea que define a peticion como esta conección.




Bueno, basicamente lo que hace este script es que al ser llamado hace un bucle sobre todos los elementos de un form y los envia por AJAX, recibiendolos dinamicamente en un DIV.

Código PHP:
<SCRIPT LANGUAGE=JavaScript>
function 
nuevoAjax(){
    var 
xmlhttp=false;
    try {
    
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (
e) {
    try {
    
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (
E) {
    
xmlhttp false;
    }
    }

    if (!
xmlhttp && typeof XMLHttpRequest!='undefined') {
    
xmlhttp = new XMLHttpRequest();
    }
    return 
xmlhttp;
}

function 
enviarFormulario(urlformiddivrespuesta){
        var 
Formulario document.getElementById(formid);
        var 
longitudFormulario Formulario.elements.length;
        var 
cadenaFormulario "";
        var 
sepCampos;
        
sepCampos "";
        for (var 
i=0<= Formulario.elements.length-1;i++) {
            
cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value);
            
sepCampos="&";
    }
    
peticion=nuevoAjax();
    
peticion.open("POST"urltrue);
    
peticion.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=ISO-8859-1');
    
peticion.send(cadenaFormulario);
    
peticion.onreadystatechange = function() {
          if (
peticion.readyState == && (peticion.status == 200 || window.location.href.indexOf ("http") == - 1)){
                
document.getElementById(divrespuesta).innerHTML peticion.responseText;
          }
    }
}
</script> 
Modo de uso:

Crear un DIV para recibir los datos, un form con un id para decirle donde buscar los lelementos de formulario, y al botón de submit asignarle que llame a esta función:

Por ejemplo, para cargar los datos fuera de nuestro form:

Código PHP:
<form id="formregistro" action="#">
        
Formulario de registro:
        <
input type="text" name="username" id="name" />
        <
input type="password" name="passwd" id="pass" />
        <
input type="text" name="nombre" id="nombre" />
        <
input type="text" name="apellido" id="apellido" />
        <
input type="button" value="Registrarse" 
                    
onclick="enviarFormulario('registro.php','formregistro', 'respuesta');"/>
        </
form>
<
div id="respuesta">
</
div
O, por ejemplo, para hacer un formulario de login que se carge sobre si mismo:

Código PHP:
<div id="contenido">
<
form id="login" action="#">
        
Por favoridentif&iacute;quese
        
<input type="text" name="username" id="name" />
        <
input type="password" name="passwd" id="pass" />
        <
input type="button" value="Ingresar" 
                    
onclick="enviarFormulario('member.php','login', 'contenido');"/>
        </
form>
</
div

Errores, sugerencias?
Henkka está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 22:27.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93