• Publicidad

Paso de parámetros entre scripts

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Paso de parámetros entre scripts

Notapor hugo11ab » 2009-01-28 14:18 @637

¿Qué tal? Nuevamente solicitando de su valiosa y oportuna ayuda. El problema que tengo es el siguiente: Estoy utilizando un script el cual lo pongo a continuación:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
BEGIN{ @INC=(@INC,"/var/www/cgi-bin/comun"); }
use binar10_html;
use strict;


 &frm_inicio();
 exit;

sub frm_inicio {
 my($frm_p,@des_mod,%lab_des_mod);

 push @des_mod,'0'; $lab_des_mod{'0'}='Selecciona un año'; $i=1;
 ($rs,$fetch)=record(db=>"fir2006",tabla=>"programa",condicion=>"group by 1 order by 1",campos=>"anio",alias=>"anio",visible=>"si");
 while($fetch->()) {
  $des_mod[$i]=($$rs{anio});
  $lab_des_mod{$des_mod[$i]}=$$rs{anio};
  $i++;
 }

 $frm_p=new HTML::Table(-rows=>5,-cols=>2,-border=>0,-bgcolor=>0,-width=>"80%",-spacing=>0,-padding=>0,-class=>'tablaP');
 $frm_p->setCell(1,1, "<div id='demoIzq'>".popup_menu(-name=>'mod_inve',-id=>'mod_inve',-value=>[(@des_mod)],-labels=>{%lab_des_mod},-class=>'cur',-onChange=>'cargaContenido(this.id)')."<div>");
 $frm_p->setCell(2,1, "<div id='demoDer'><div>");


 print header(-type=>'text/html',-expires=>'-20d',-cache-control=>'no-cache, must-revalidate');
 print start_html(-title=>'DESARROLLOS',
                  -script=>[
                            { -language => 'JavaScript', -src => $server.'/script/comun/combos.js'    }

                           ],
                  -background=>'#336699',
                  -action=>$script_name,
                  -name=>'form',
                  -id  =>'form',
                  -BGCOLOR=>'#ffffff',
                  -style=>  {-src=>$server.'/desarrollo/desarrollo.css'},
                  -link=>'#0000ee',
                  -vlink=>'#0000ee',
                  -onload=>$onload
                 );
 print"<center>";
 $frm_p->print;
 print end_form();
 print "</center>";
 print end_html();
 exit;
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Este script funciona bien,lo que hace es mandar a llamar a otro script mediante el ajax. Aqui pongo el archivo js que estoy utilizando.

Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
// Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
var listadoSelects=new Array();
listadoSelects[0]="mod_inve";
//listadoSelects[1]="estados";

function buscarEnArray(array, dato)
{
        // Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
        var x=0;
        while(array[x])
        {
                if(array[x]==dato) return x;
                x++;
        }
        return null;
}

function cargaContenido(idSelectOrigen)
{
        // Obtengo el select que el usuario modifico
        var selectOrigen=document.getElementById(idSelectOrigen);
        // Obtengo la opcion que el usuario selecciono
        var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
        // Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."

        // Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
        var ajax=nuevoAjax();
        //ajax.open("GET", "combo_proceso.cgi?db=admin&opcion="+opcionSeleccionada, true);

        ajax.onreadystatechange=function()
        {
                if (ajax.readyState==4)
                {
                        //selectDestino.parentNode.innerHTML=ajax.responseText;
                        demoDer.innerHTML=ajax.responseText;
                }
        }
        ajax.open("POST","combo_proceso.cgi",true);
        ajax.send("opcion="+opcionSeleccionada)
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema que tengo es que aun no sé cómo pasar los parámetros de este script hacia el primero y de ahí esos parámetros sean validados mediante JavaScript. Ya que en este script estoy utilizando una rutina para que me seleccione varias casillas dependiendo la opción seleccionada. Aquí pongo el script y agradecería su ayuda.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
BEGIN{ @INC=(@INC,"/var/www/cgi-bin/comun"); }
use binar10_html;
use strict;

use vars qw($option1);

if($FORM{opcion})     { &buscaModelo();                }
#&buscaModelo();
 exit;

sub buscaModelo {
 my($table2,$fiscales,$especiales,$r,$r2,$table00,@option1);



 ($rs,$fetch)=record(db=>"fir2006",tabla=>"programa",condicion=>"WHERE anio=$FORM{opcion} order by 3 desc,1 asc",campos=>"clvprograma,descripcion,tipo",visible=>"no");
 #($rs,$fetch)=record(db=>"fir2006",tabla=>"programa",condicion=>"WHERE anio=2008 order by 3 desc,1 asc",campos=>"clvprograma,descripcion,tipo",visible=>"no");
 $fiscales=new HTML::Table(-cols=>1,-border=>0,-bgcolor=>0,-width=>"95%",-spacing=>0,-padding=>0);
 $especiales=new HTML::Table(-cols=>1,-border=>0,-bgcolor=>0,-width=>"95%",-spacing=>0,-padding=>0);
 $r=0; $r2=0; $i=0;
 while($fetch->()){
   if ($$rs{tipo} eq 'F') {
     $r++;
     $fiscales->setCell($r,1,  "<input name=\"P$$rs{clvprograma}\" type='checkbox' checked disabled > $$rs{descripcion}");
     $fiscales->setCellAlign($r,1,"left");
   } else {
     $r2++;
     $especiales->setCell($r2,1,  "<input name=\"P$$rs{clvprograma}\" type='checkbox' checked disabled > $$rs{descripcion}");
     $especiales->setCellAlign($r2,1,"left");
   }
   push @option1, "option_array1[$i]="."'P".$$rs{clvprograma}."'"; $i++;
 }
 $option1=join("; ", @option1);

 $table2 = new HTML::Table(-row=>2, -cols=>4, -border=>0, -bgcolor=>0, -width=>"100%", -spacing=>3, -padding=>1);
 $table2->setCell(1,1,  " <b>FISCALES</b> ");
 $table2->setCell(1,2,  "<input name='tipo_prog' type='radio' value='F' onClick='activaprogramas(1);' checked>");
 $table2->setCell(2,1,  " <b>ESPECIALES</b> ");
 $table2->setCell(2,2,  "<input name='tipo_prog' type='radio' value='E' onClick='activaprogramas(2);'>");
 $table2->setCell(1,3,  " <b>SELECCIONAR</b> ");
 $table2->setCell(1,4,  "<input name='tipo_prog' type='radio' value='S' onClick='activaprogramas(3);'>");

 $table00 = new HTML::Table(-rows=>2,-cols=>2,-border=>0,-bgcolor=>0,-width=>"100%",-spacing=>1,-padding=>1,-class=>'tablaC');
 $table00->setCell(1,1, "<fieldset><legend><font class=\"sBL4b\"><b>SELECCIONE UNA OPCION </b></legend></font>".$table2->getTable."</fieldset>");
 $table00->setCell(2,1, "<fieldset><legend><font class=\"sBL4b\"><b>PROGRAMAS FISCALES </b></legend></font>".$fiscales->getTable."</fieldset>");
 $table00->setCell(2,2, "<fieldset><legend><font class=\"sBL4b\"><b>PROGRAMAS ESPECIALES </b></legend></font>".$especiales->getTable."</fieldset>");
 $table00->setCellVAlign(2,1, "TOP");
 $table00->setCellVAlign(2,2, "TOP");
 $table00->setCellWidth(2, 1, "50%");
 $table00->setCellWidth(2, 2, "50%");
 $table00->setCellColSpan(1,1,2);

 #print header(-type=>'text/html',-expires=>'-20d',-cache-control=>'no-cache, must-revalidate');
 print header();
 print start_html(-title=>'FIRCO',
                  -script=>[
                            { -language => 'JavaScript', -src => $server.'/script/comun/validaprog.js'    }
                           ],
                  -background=>'#336699',
                  -action=>$script_name,
                  -name=>'form',
                  -id  =>'form',
                  -BGCOLOR=>'#ffffff',
                  -style=>  {-src=>$server.'/firco/firco.css'},
                 );
 print"<center>";

 print '<center>';
 $table00->print;
 print '</center>';
 print end_html();
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Quiero pasar como parámetro el contenido de la variable $option1, para que pueda validar los chekbox.

Saludos
hugo11ab
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2006-07-22 23:24 @016

Publicidad

Notapor danimera » 2009-01-29 11:03 @502

Mira, yo lo que intentaría devolver en un div un nuevo código JavaScript o usaría Prototype que me retorna el valor de la ejecución del Ajax.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor hugo11ab » 2009-01-29 15:24 @683

¿Cómo puedo mandar el código JavaScript en un div? Ya lo intenté y no me funciona.
hugo11ab
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2006-07-22 23:24 @016

Notapor explorer » 2009-01-29 17:08 @755

Voy a decir una cosa, pero sin haberlo comprobado: no creo que si envías código en un div sea ejecutado por el cliente. Yo supongo que será incorporado en el flujo HTML, pero no interpretado. Y para que sea interpretado, será necesario que el código que lo ha traído lo mande interpretar, como solemos hacerlo en Perl, con la función eval().

Repito que no sé si es cierto o no. Es solo una suposición.

En cuanto al problema planteado, yo creo que a lo danimera se refería es a una técnica que se usaba hace 8 años: en el árbol de objetos de cada página hay un frame que se mantenía constante a lo largo de toda la navegación del usuario. Allí, la aplicación guardaba datos, como la sesión del usuario. Así se evitaba enviar cookies en cada petición.

Pero hoy en día, la sesión ya se puede mantener con cookies sin problemas de seguridad.

En cuanto al problema que plantea hugo11ab, ¿no podrías tener todo el código JavaScript al principio? Así, no tendrías que tener que cargarlo según la petición.
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 hugo11ab » 2009-01-29 19:45 @864

Ya puse el código al inicio y sí funcionan las llamadas a las funciones de JavaScript. El problema es que todavía no logro pasar la variable $option1 del segundo CGI al primero. Alguna idea de cómo hacerlo.
hugo11ab
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2006-07-22 23:24 @016

Notapor explorer » 2009-01-29 20:14 @885

¿Y poniéndola en el URL de la llamada? Vamos, como si fuese un método GET... como lo tienes comentado en la parte de 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 hugo11ab » 2009-01-29 20:41 @903

Sí utilizo el método GET y no pasa nada, sigue sin pasar los parámetros.
hugo11ab
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2006-07-22 23:24 @016

Notapor monoswim » 2009-01-30 07:16 @344

Solo una recomendación: ¡ USA TEMPLATES !

Por definición mezclar códigos es malo, te queda un script 50% HTML y 50% Perl... muy feo para modificar luego...

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires


Volver a Intermedio

¿Quién está conectado?

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