• Publicidad

Tratar más de un valor con CGI::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.

Tratar más de un valor con CGI::Ajax

Notapor Negrazo » 2009-07-16 02:20 @139

Hola a todos:
Estoy haciendo un script en Perl usando CGI::Ajax que trata de lo siguiente:

Que al recibir en un campo de entrada una clave de "State" me devuelva en la misma página todas las ciudades que en mi tabla "Cities" pertenezcan a ese estado.

Por ejemplo en el estado = "CA" tengo tres ciudades (Los Angeles, San Diego y San Francisco), pero al ejecutar mi script solo me da "Los Angeles", es decir, siempre me da solo una ciudad aunque haya más en la tabla.

El script se ve muy sencillo, pero no le encuentro.

Aquí va el código:

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

  my @doc = "";
  my @ent = "";
  my $i = 0;

  my $cgi = new CGI;
  my $pjx = new CGI::Ajax( 'js_func' => \&perl_func );
  print $pjx->build_html( $cgi, \&Show_HTML);

  sub perl_func {
  my $input = shift;
   # Configurar el acceso a la DB
my $con = DBI->connect('DBI:mysql:database=blackman;host=localhost','root','root') or die('No me puedo conectar to DB');
print "<B>Ya abri la base de datos</B>";
print "<BR>";
my $sth = $con->prepare("SELECT city FROM cities where state = '$input' ");
$sth->execute() or die "Error al leer Ciudades...$!";
while (@doc = $sth->fetchrow_array)
  {
      $ent[$i] = $doc[0];
      $i++;
            }
return( @ent );
  }

sub Show_HTML {
    my $html = <<EOHTML;
    <HTML>
    <BODY>
      Teclee el Estado:
        <input type="text" name="val1" id="val1"
         onkeyup="js_func( ['val1'],  ['resultdiv'] )">
      <br>
      <div id="resultdiv"> </div>
    </BODY>
    </HTML>
EOHTML

    return $html;
  }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Como pueden ver el resultado cae en la <div> de nombre "resultdiv" pero estoy seguro que me falta algo.

Gracias por la ayuda que me puedan dar.
Negrazo.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Publicidad

Re: Pregunta de CGI::Ajax

Notapor explorer » 2009-07-16 03:50 @201

Primero, recordarte que puedes (y debes) etiquetar tu parte de código en Perl con las etiquetas correspondientes, para que se vea mejor. Edita tu mensaje.

Segundo, puedes hacer dos cosas:
* La más sencilla es que sea el cgi el que cree todo el código HTML, para que sea devuelto como UN solo valor a la petición Ajax.

* En el manual de CGI::Ajax, en la sección de ejemplos, ejemplo 3, se comenta cómo actuar frente a la devolución de varios parámetros. En ese caso se puede indicar una subrutina JavaScript que reciba los valores devueltos, los formatee en HTML y los coloque en su lugar definitivo de la página.
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

Re: Pregunta de CGI::Ajax

Notapor kidd » 2009-07-16 07:53 @370

Otra manera de lograrlo, es enviar una sola cadena con delimitadores que después separaras con JavaScript, por ejemplo, podrías enviar la siguiente cadena:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. Los Angeles|San Diego|San Francisco 


Después con Javascript haces algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
var ciudadesString = "Los Angeles|San Diego|San Francisco"

var Ciudades = ciudadesString.split("|");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Con esto tendrás un array Ciudades con todos los valores enviados.

Ya con eso puedes hacer lo que necesites, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
var contenidoHTML = "";

for(var i=0; i<Ciudades.length; i++){
    contenidoHTML += Ciudades[i] + "<br>";
}

document.getElementById("resultdiv").innerHTML = contenidoHTML;
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Tratar más de un valor con CGI::Ajax

Notapor Negrazo » 2009-07-16 09:15 @427

Gracias Kidd y explorer.

Honestamente este tema está algo complicado para mi, porque aquí se entrelazan varias cosas: Perl, HMTL, JavaScripts, etc, pero voy a tratar de entenderlo y ponerlo en marcha.

Luego les platico cómo me fue.

Saludos.

Y nuevamente muchas gracias.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico


Volver a Avanzado

¿Quién está conectado?

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

cron