Página 1 de 1

Paso de parámetros entre scripts

NotaPublicado: 2009-01-28 14:18 @637
por hugo11ab
¿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.003 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.002 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.005 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

NotaPublicado: 2009-01-29 11:03 @502
por danimera
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.

NotaPublicado: 2009-01-29 15:24 @683
por hugo11ab
¿Cómo puedo mandar el código JavaScript en un div? Ya lo intenté y no me funciona.

NotaPublicado: 2009-01-29 17:08 @755
por explorer
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.

NotaPublicado: 2009-01-29 19:45 @864
por hugo11ab
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.

NotaPublicado: 2009-01-29 20:14 @885
por explorer
¿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...

NotaPublicado: 2009-01-29 20:41 @903
por hugo11ab
Sí utilizo el método GET y no pasa nada, sigue sin pasar los parámetros.

NotaPublicado: 2009-01-30 07:16 @344
por monoswim
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