• Publicidad

Perl y Ajax

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Perl y Ajax

Notapor zozo666 » 2007-06-03 23:15 @010

Hola gente de la web. Necesito una sola cosita. Necesitaría que me muestre el que por favor tenga a mano un ejemplo de autocompletar, o de carga dinámica o de alguna otra cosa de Ajax en Perl, osea todo el código que se necesite para esto; por lo que tengo entendido es medio difícil y como recién empiezo en esto me justaría ver ejemplos. En Internet casi no se encuentra Perl Y Ajax, por eso si no encuentran o no tienen igual me vendría bien una explicación de cómo empezar a hacer un autocompletar o una carga dinámica de una tabla.

Por ejemplo: Tengo una BD y una tabla con algunos registros; quisiera agregarle dinámicamente sin que se recargue la pagina, otros registros a la tabla, obviamente, que se vea en HTML. Osea que a medida que vaya agregando registros mediante un botón AGREGAR me vaya llenando la BD y a su vez mostrando los datos en un <table> de HTML.

Muchas gracias de antemano
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Publicidad

Notapor explorer » 2007-06-04 01:26 @101

Luego te pongo un ejemplo, pero antes deberías mirarte el módulo CGI::Ajax.

Un ejemplo de lo que se puede hacer con él es el también módulo AEAE.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor zozo666 » 2007-06-04 08:27 @394

Si estuve viendo lo de CGI:Ajax en Perl, ya lo realicé, ahora quiero seguir un paso más, como recién empiezo, quiero ir adelantándome de a poco, ¿que me recomiendan ustedes que saben? ya hice y entendí el ejemplo de CGI:Ajax y ya leí unos tutoriales. ¿Con qué me conviene seguir?
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor zozo666 » 2007-06-07 08:36 @400

Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use CGI::Ajax;
use CGI;
use DBI;
use HTML::Template;
use strict;

my $q = new CGI;
my (%Variables);

my $buscando = sub {

    my $buffer = $ENV{'QUERY_STRING'};

    my @pairs = split( /&/, $buffer );

    foreach my $pair (@pairs) {

        my ( $name, $value ) = split( /=/, $pair );

        $name  =~ tr/+/ /;
        $name  =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

        $Variables{$name} = $value;

    }

    my $indice         = "$Variables{'nombre'}" . "%";
    my $db             = "probando";
    my $host           = "localhost";
    my $port           = "3306";
    my $userid         = "root";
    my $passwd         = "zxcvbn";
    my $connectionInfo = "DBI:mysql:database=$db;$host:$port";
    my $columna        = "*";
    my $query
        = "SELECT * FROM opiniones WHERE (nombre LIKE '$indice') OR (mail LIKE '$indice') OR (direccion LIKE '$indice') OR (opinion LIKE '$indice')";

    my $cgi = CGI->new;
    my $dbh = DBI->connect( $connectionInfo, $userid, $passwd )
        or die print "No hay conexion con la base<br>";

    my $t = HTML::Template->new( filename => 'db.tmpl' );

    $t->param( ROWS => $dbh->selectall_arrayref( $query, { Slice => {} } ) );

    $dbh->disconnect;

    print $cgi->header;
    print $t->output;
};

my $Mostrar_Form = sub {
    my $html = <<EOT;
<HTML>
<BODY>
<form>
<input type="hidden" id="item" size="6">
<input type="hidden" id="namedItem" size="6">
<input type="text" id="nombre" size="6" value=1 ><br/>
<button onclick='jsFunc(formDump(),["out"]);return false' > Buscar </button>
<div id="out">
</div>
</form>
</BODY>
</HTML>
EOT


    return $html;
};

my $pjx = CGI::Ajax->new( 'jsFunc' => $buscando );
print $pjx->build_html( $q, $Mostrar_Form );    # fin
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


Lo que hace este código es una búsqueda en una base de datos y mostrarla en una tabla creada con un TMPL. El problema es que cuando imprimo la tabla me sale Content-Type: text/html; charset=ISO-8859-1 1 en la última fila de la primera columna. Probé también imprimiendo los resultados sin tabla ni nada, pero también me sale lo mismo. ¿Que tendría que cambiarle al código?
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-06-07 09:00 @417

Te he editado el código un poco: he cambiado de línea el use strict; y he ajustado el ';' del documento incluido con la marca EOT, y luego he formateado todo el código con el perltidy.

Yo veo que quizás sobra la línea print $cgi->header; dentro de la subrutina busqueda().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor zozo666 » 2007-06-07 14:51 @660

Muchas Gracias problema solucionado, había un par de cosas que estaban de más y algunas sentencias con fallas. Gracias
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-06-09 06:54 @329

Sería interesante ver como queda el código final...

He encontrado el sitio desde donde has sacado la idea: http://www.perl.com/lpt/a/977

Fíjate que en los ejemplos que comentan, la función que es llamada por CGI::Ajax devuelve el html generado en un return, no en un print. Esa es la razón por la cual aparecía un '1' suelto: es el resultado de ejecutar el print y es la última sentencia de la función, por lo que es el valor que se devuelve.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor zozo666 » 2007-06-10 15:14 @676

Sí, es verdad. ¿Qué te parece el código? ¿Lo podré usar para hacer algunos proyectos con eso? ¿O no tiene buena performance? Gracias
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-06-10 17:17 @762

Tiene una buena idea, que es la de las funciones AddLoadEvent y, sobre todo, en installHandlers, en Javascript. Y que me las apunto para mis proyectos, claro. La idea de agregar los eventos OnChange después y no en el diseño de la página, es muy, pero que muy bueno.

En lo demás, es un ejemplo muy bueno de cómo pasar de CGI a CGI::Ajax.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor zozo666 » 2007-06-13 09:13 @425

Tengo un problemilla con algo muy parecido.

O sea la cosa es así, tengo un sub mostrar_cosas que lo que hago dentro de este es hacer un SELECT y pasar los valores a un TMPL.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub Mostrar_Form {


my $db="probar";
my $host="localhost";
my $port="-";
my $userid="-t";
my $passwd="-";
my $connectionInfo="DBI:mysql:database=$db;$host:$port";


my $dbh = DBI->connect($connectionInfo,$userid,$passwd) or die print "No hay conexion con la base<br>";

my $t = HTML::Template->new(filename => 'listarautos.tmpl');

my $table_data = $dbh->prepare('SELECT descripcion,idAuto FROM rubros WHERE marca="0"');
$table_data->execute;

my $arrayref = $table_data->fetchall_arrayref({});
$t->param(ROWS => $arrayref);

$dbh->disconnect;

my $html = $t->output;
return $html;
};
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Lo mando a este TMPL

Sintáxis: [ Descargar ] [ Ocultar ]
  1. <TMPL_LOOP ROWS> 
  2. <form> 
  3. <p> 
  4. <input type="hidden" id="item" size="6"> 
  5. <input type="hidden" id="namedItem" size="6"> 
  6. <input type="hidden" id="mirar" size="6" value=<TMPL_VAR NAME=idRubro>> 
  7. <a href="#" onclick='jsFunc(formDump(),["out"]);return false' > <TMPL_VAR NAME=Nombre> </a></p> 
  8. </form> 
  9. </TMPL_LOOP ROWS> 
  10. <div id="out"> 
  11. </div> 


lo que hace esto es tirame la lista del SELECT que hice anteriormente, y tranformarme los datos que saque en botones para despues hacer con AJAX esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $pjx = CGI::Ajax->new( 'jsFunc' => \&buscando);
print $pjx->build_html($q, \&Mostrar_Form, {-type=> 'text/html'});
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub buscando {

my $buffer = $ENV{'QUERY_STRING'};

my @pairs = split(/&/, $buffer);

foreach my $pair (@pairs) {

my ($name, $value) = split(/=/, $pair);


$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$Variables{$name} = $value;

}

my $indice = "$Variables{'marca'}";
my $db="clasificados";
my $host="localhost";
my $port="3306";
my $userid="root";
my $passwd="zxcvbn";
my $connectionInfo="DBI:mysql:database=$db;$host:$port";
my $columna="*";
my $query = "SELECT Nombre FROM rubros WHERE parent='$indice'";

my $cgi = CGI->new;
my $dbh = DBI->connect($connectionInfo,$userid,$passwd) or die print "No hay conexion con la base<br>";

my $t = HTML::Template->new(filename => 'db.tmpl');

$t->param(ROWS => $dbh->selectall_arrayref($query, { Slice => {} }));

$dbh->disconnect;

my $html = $t->output;
return $html;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


my $t = HTML::Template->new(filename => 'db.tmpl'); en esta linea comunico con el db.tmpl e imrpmimo en el <div id="out">
</div>


El problema es que si tengo más de uno seleccionado no funcionan estas sentencias, pero si tengo solamente una seleccionada, funciona bien y me muestra todos los autos, de la marca que quiero. ¿Cómo soluciono esto? ¿En dónde está el problema?
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Siguiente

Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados