Página 1 de 1

Problemas al ejecutar un script en Ajax

NotaPublicado: 2008-01-15 19:09 @840
por hugo11ab
Hola que tal, aquí molestándolos de nuevo y solicitando su oportuna y eficiente ayuda. El problema que tengo es con respecto a un script de Perl con Ajax. Ya que soy nuevo en Ajax no sé cómo adaptar las instrucciones de Ajax a Perl. Este es el script que estoy haciendo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#! /usr/bin/perl -w

BEGIN
{
    # Declaramos la ruta de ubicacion del modulo 'comun'.
    @INC=(@INC,"/var/www/cgi-bin/comun");
}


use contratos_html; #aqui se encuentran los modulos
use CGI::Ajax;

use vars qw($table2 $JSCRIPT);


my $cgi = new CGI;
my $pjx = new CGI::Ajax( 'exported_func' => \&perl_func );

print $pjx->build_html( $cgi, \&Show_HTML2);

sub perl_func {
  my $input = shift;
  # do something with $input
  my $output = $input . " was the input!";
  return( $output );
}

sub Show_HTML2 {
my $table2 = <<EOHTML;

    $table2=new HTML::Table(-rows=>4,-cols=>1,-border=>0,-bgcolor=>0,-width=>"100%",-spacing=>2,-padding=>0);
    $table2->setCell(1,1, "Indrodusca cualquier cosa: &nbsp;");
    $table2->setCell(1,2, textfield(-name=>'vall',id=>'vall',-onKeyUp=>"exported_func( ['val1'], ['resultdiv']);"));
    $table2->setCell(2,1, "<br>");
    $table2->setCell(3,1, "<div id=\"resultdiv\">"."</div>");
    $table2->setCell(4,1,"<hr>".submit(-name=>'opc',-value=>'Continuar',-class=>'Bsbttn'));

    &js();
    print header;
    &print_cabeza2('');    # esta funcion se encuentra en el (pm)
    print $JSCRIPT;
    print start_multipart_form(-action=>$script_name,
                              -name=>'form',
                              -id  =>'form',
                              -onsubmit=>'return validacaja()'
                            );

EOHTML

return $table2;
}


sub print_cabeza2 {
 print start_html(-title=>'ENLACE',
                  -script=>$JSCRIPT,
                  -background=>'../../images/enlace/fondo.gif',
                  -BGCOLOR=>'#FFFFFF',
                  -style=> {-src=>'../../enlace/enlace.css'},
                  -link=>'#003366',
                  -vlink=>'#000000',
                  -method=>'post'
                 );
}

#valida que la caja de texto no este vacia
sub js {
$JSCRIPT=<<EOT;
<script language="JavaScript" type="text/javascript">
<!-- Hide script
//<![CDATA[

function validacaja() {
 if (form.vall.value eq '') {
  alert ("El campo de texto no puede ir vacio");
  return false ;
 }
 return true;
}
//]]> End script hiding -->
</script>
EOT

}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El error que me aparece es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
</script></head><body>No head/html tags, nowhere to insert.  Returning javascript anyway<br></body></html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



He visto algunos ejemplos, y en todos meten directamente el código HTML, pero en mi caso utilizo el modulo HTM::Table y la rutina de print_cabeza. También por otra parte ocupo funciones de JavaScript. Espero y me ayuden a adaptarlo sin la necesidad de ocupar directamente el código HTML.

NotaPublicado: 2008-01-15 19:23 @849
por creating021
Solo comento algo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
BEGIN
{
   # Declaramos la ruta de ubicacion del modulo 'comun'.
   push @INC, "/var/www/cgi-bin/comun";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Creo que es mejor hacer un push que definir todo el array.

¿En dónde llamas CGI y HTML::Table?
¿Sí usas CGI... para qué HTML::Table?
¿Sí se puede usar divs con HTML::Table? :shock:

NotaPublicado: 2008-01-15 20:48 @908
por explorer
Quizás sea mejor usar use lib ... que modificar directamente @INC. Pero el resultado es el mismo.

HTML::Table parece permitir la creación de tablas de una forma más orientada a objetos mientras que la solución que da CGI es más 'funcional'.

El fallo que aparece me parece que se refiere a que Show_HTML2 solo genera las tablas, pero no generan el resto de las cabeceras.

Vemos que quizás print_cabeza2 no las genera. Quizás falta la línea use CGI qw[:standard]; para que Perl sepa qué es lo que hace start_html();

El uso de use strict; y use warnings; es primordial para pillar estos fallos.

Problemas al ejecutar un Script en Perl y Ajax

NotaPublicado: 2008-01-15 22:43 @988
por hugo11ab
Les agradezco sus prontas respuestas.

En el módulo de contratos_html es ahí donde están declarados los módulos que ustedes mencionan.

Ya puse el use strict y el use warnings y me sigue saliendo el mismo error que mencioné al principio.

También accedí a los log y me manda este error.

[Tue Jan 15 21:39:19 2008] [error] [client 192.168.1.12] malformed header from script. Bad header=<html><head><script type="text: nuevo.pl

¿A qué se refieren con que puedo usar CGI en lugar de HTML::Table?

Les agradezco de nuevo sus respuestas y me puedan ayudar a resolver este problema.

NotaPublicado: 2008-01-16 10:07 @463
por explorer
Ya encontré el fallo.

El problema es que la definición de '<<EOHTML' está mal. Está englobando el código. Y ese código no se ejecuta en ninguna parte.

Problemas al ejecutar un script en Perl y Ajax

NotaPublicado: 2008-01-16 11:22 @515
por hugo11ab
Gracias explorer por tus acertadas respuestas. Disculpa que te siga molestando pero ya le hice de varias formas y no puedo dejar bien este script. ¿Qué me sugieres que le quite o le ponga al script para que lo deje bien? De antemano muchas gracias.

NotaPublicado: 2008-01-16 21:18 @929
por explorer
En este foro hay algún ejemplo hecho con CGI::Ajax. Usa el sistema de búsqueda.

De tu script yo creo que le falta poco para terminar. Yo ahora mismo donde estoy no puedo probarlo. Lo siento. Quizás dentro de un par de días.

A ver si otra persona se anima a corregirlo o decir qué sobra o falta.