Estaba pasando a CGI::Application un proyecto que tengo a medio hacer que usa perljax y he tenido problemas porque no funciona el Ajax: se comporta de manera extraña, no devuelve el resultado a veces sí y otras no.
Os dejo el código que uso:
Using perl Syntax Highlighting
#el setup de cgi application
sub setup {
my $self = shift;
$self->start_mode('index');
$self->run_modes(
'index' => 'index',
'regform' => 'regform',
'loginform' => 'loginform',
'loginprocess' => 'loginprocess',
'logout' => 'logout',
'perljax_verificar_pass' => 'perljax_verificar_pass',
'perljax_verificar_user' => 'perljax_verificar_user',
);
}
#funcion que muestra el formulario de registro
sub regform {
my $self = shift;
my $query = $self->query;
my $html = $self->param('html');
my $path = $self->param('path');
my $captcha = Authen::Captcha->new(
data_folder => "${path}captcha",
output_folder => "${path}img"
);
my $md5sum = $captcha->generate_code(5);
my $url = $self->param('url');
my $perljax = CGI::Ajax->new(
'perljax_user' => "${url}?rm=perljax_verificar_user",
'perljax_pass' => "${url}?rm=perljax_verificar_pass"
);
$perljax->JSDEBUG(2);
$perljax->DEBUG(1);
my $return = "";
$return .= $query->start_html(
-title => 'Registro Usuarios - GaNJa',
-keywords => 'marihuana cannabis thc',
-description => 'Registros de usuarios en GaNJa.',
-style=> { -src=> [ $self->param('css') ] }
);
$return .= $html->header( $self->param('session')->param('profile') );
$return .= $html->regform( $self->param('session')->param('profile'), $md5sum );
$return .= $html->footer();
return $perljax->build_html($self, $return);
}
#funciones perljax
sub perljax_verificar_user {
my $user = shift;
if ((length($user) < 5) or ($user =~ m/\W/)) {
return "El nombre de usuario debe contener entre 5 y 12 caracteres (alfa-numericos o guion)";
}
#elsif comprobar si el usuario existe {}
else { return ""; }
}
sub perljax_verificar_pass {
my ($pass, $cpass) = @_;
if ((length($pass) < 5) or ($pass =~ m/\W/)) {
return "La contraseña debe contener entre 5 y 12 caracteres (alfa-numericos o guion)";
}
elsif ($pass ne $cpass) { return "Las contraseñas no coinciden"; }
else { return ""; }
}
sub setup {
my $self = shift;
$self->start_mode('index');
$self->run_modes(
'index' => 'index',
'regform' => 'regform',
'loginform' => 'loginform',
'loginprocess' => 'loginprocess',
'logout' => 'logout',
'perljax_verificar_pass' => 'perljax_verificar_pass',
'perljax_verificar_user' => 'perljax_verificar_user',
);
}
#funcion que muestra el formulario de registro
sub regform {
my $self = shift;
my $query = $self->query;
my $html = $self->param('html');
my $path = $self->param('path');
my $captcha = Authen::Captcha->new(
data_folder => "${path}captcha",
output_folder => "${path}img"
);
my $md5sum = $captcha->generate_code(5);
my $url = $self->param('url');
my $perljax = CGI::Ajax->new(
'perljax_user' => "${url}?rm=perljax_verificar_user",
'perljax_pass' => "${url}?rm=perljax_verificar_pass"
);
$perljax->JSDEBUG(2);
$perljax->DEBUG(1);
my $return = "";
$return .= $query->start_html(
-title => 'Registro Usuarios - GaNJa',
-keywords => 'marihuana cannabis thc',
-description => 'Registros de usuarios en GaNJa.',
-style=> { -src=> [ $self->param('css') ] }
);
$return .= $html->header( $self->param('session')->param('profile') );
$return .= $html->regform( $self->param('session')->param('profile'), $md5sum );
$return .= $html->footer();
return $perljax->build_html($self, $return);
}
#funciones perljax
sub perljax_verificar_user {
my $user = shift;
if ((length($user) < 5) or ($user =~ m/\W/)) {
return "El nombre de usuario debe contener entre 5 y 12 caracteres (alfa-numericos o guion)";
}
#elsif comprobar si el usuario existe {}
else { return ""; }
}
sub perljax_verificar_pass {
my ($pass, $cpass) = @_;
if ((length($pass) < 5) or ($pass =~ m/\W/)) {
return "La contraseña debe contener entre 5 y 12 caracteres (alfa-numericos o guion)";
}
elsif ($pass ne $cpass) { return "Las contraseñas no coinciden"; }
else { return ""; }
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
El código HTML que ejecuta las funciones Ajax y el div del resultado;
- <form method="post" action="$url" enctype="application/x-www-form-urlencoded">
- <input type="hidden" name="rm" value="regprocess">
- <input type="text" name="user" size="12" maxlength="12" onKeyUp="perljax_user( ['user'], ['error_user'] );"> Nombre de usuario<br><br>
- <input type="password" name="pass" size="12" maxlength="12"> Contraseña<br><br>
- <input type="password" name="cpass" size="12" maxlength="12" onKeyUp="perljax_pass( ['pass', 'cpass'], ['error_pass'] );"> Repite contraseña<br><br>
- <!-- El Formulario sigue pero no lo pego todo -->
- <!-- Los divs del resultado; -->
- <div id="error_user"></div>
- <br>
- <div id="error_pass"></div>
- </div>
Estoy casi seguro de que el problema está en el if de las funciones perljax; ¿puede ser? porque viendo el debug de la aplicación ¡no falla nada!
Saludos y gracias,