Página 1 de 1

Mandar llamar función JavaScript en una variable de Perl

NotaPublicado: 2008-01-29 18:43 @821
por aneita
Hola tengo este problema, necesito saber el valor del combo que selecciono y pasárselo a una variable en Perl.

Para eso tengo mi select.

[syntax="html"]<form id="form1" name="form1" method="post" action="'.$param.'">
<input type="hidden" name="ind">
<input type="hidden" name="mes3">
<input type="hidden" name="opc" value="dsp">
<label>
<select name="ComboMes">
<option value="0">Mes</option>
<option value="1">Enero</option>
<option value="2" selected="selected">Febrero</option>
<option value="3">Marzo</option>
<option value="4">Abril</option>
<option value="5">Mayo </option>
<option value="6">Junio</option>
<option value="7">Julio</option>
<option value="8">Agosto</option>
<option value="9">Septiembre</option>
<option value="10">Octubre</option>
<option value="11">Noviembre</option>
<option value="12">Diciembre</option>
</select>
</label>
</form>
[/synt]
Y mi función que me devuelve el valor seleccionado.

[syntax="javascript"] function valor_Combo()
{
valor = form1.ComboMes.options[form1.ComboMes.selectedIndex].value;
return valor;
}[/synt]

Necesito pasarla a la variable
[syntax="perl"] $mes2 = JavaScript::valor_Combo();
[/synt]
pero no me regresa nada...

¿Cómo puedo hacer eso? Alguien ayuda. ¡¡Muchas gracias!!

NotaPublicado: 2008-01-29 19:20 @847
por explorer
Bienvenida a los foros de Perl en Español, aneita.

Un momento, que me he perdido...

¿Dónde se está presentado el HTML? ¿En el navegador del cliente?

¿Dónde se está ejecutando el javascript? ¿También en el navegador del cliente? ¿O en el servidor con ayuda del módulo JavaScript?

¿Dónde se está ejecutando el perl? ¿En el servidor o en el cliente?

Me falta la secuencia de acciones de todo esto...

NotaPublicado: 2008-01-29 19:32 @855
por aneita
Bueno ese es mi gran problema: no entiendo mucho de esto.
Este es mi código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#! c:\perl\bin\perl.exe
require "cgi-lib.pl";
print "Content-type: text/html\n\n";

#-----------------------------------------------------------------------
 if (&ReadParse){
   local (*in) = @_ if @_ == 1;
   local (%in) = @_ if @_  > 1;
   local ($key);
 }
 #-------------------------------------------------------------------
if ( length($in{"uid"})    == 0 ) {print "Invalid access"; exit;};
if ( length($in{"sessid"}) == 0 ) {print "Invalid access"; exit;};
$user  =  &codeusr( "DECO", $in{"uid"}, $in{"sessid"} );
$param =  "?param=0&uid=".$in{"uid"}."&sessid=".$in{"sessid"};


$cont_ind = 0;
local($linea_fil)="...";
$fil    ="tabla.txt";
if(!open(texto,"<$fil")){print "...no existe $fil  "; exit;};
while(<texto>)
    {
      $linea_fil = $_;
      @linea = split(/\|/,$linea_fil);
          for ($j=0;$j<=12;$j++){  $tabla[$cont_ind][$j]=$linea[$j]; }
          $cont_ind++;
    }
close (texto);
$cont_ind--;
#for ($i=0; $i<=$cont_ind; $i++){  for ($j=0; $j<=12; $j++){print " $i , $j ".$tabla[$i][$j]." <br>";}}
#-------------------------------------------------------------------
print '
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>PINet</title>

<link href="estilos.css" rel="stylesheet" type="text/css" />
<script type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>

<body>
'
;
#-------------------------------------------------------------------
if ($in{"opc"} eq "dsp" ){&dsp_forma;} else {&dsp_lista;};
#-------------------------------------------------------------------
exit;
  sub dsp_forma
 {

        $indicador=$in{"ind"};
        $mes2=JavaScript&#058;:valor_Combo();
 
 print '<iframe name="opcion2" src ="'.$tabla[$indicador][$mes2].'" width="100%" height="1000px" FRAMEBORDER=0  align=middle > </iframe>         ';

 }
 sub dsp_lista {
#-----------------------------------------------------------------------
print '

<table width="105" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="101" bgcolor="#60BCEB"></td>
  </tr>
</table>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1007" height="140">
  <param name="movie" value="banner.swf" />
  <param name="quality" value="high" />
  <embed src="banner.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="1007" height="140"></embed>
</object>

<script>
function abreIndicador(ind)
{
        url = "'
.$param.'&opc=dsp&ind=" + ind + "&mes=" + valor_Combo();
        url="dsp.pl" +url;
        alert(url);
        frames[\'opcion\'].location.href=url;
        frames[\'opcion\'].location.replace(url);
        //form1.ind.value=ind;
        //form1.submit();
       
}
        function valor_Combo()
        {
        valor = form1.ComboMes.options[form1.ComboMes.selectedIndex].value;
        return valor;
        }
       
</script>
<table width="1007" height="630" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="104">
        <form id="form1" name="form1" method="post" action="'
.$param.'">
                <input type="hidden" name="ind">
                <input type="hidden" name="mes3">
                <input type="hidden" name="opc" value="dsp">
      <label>
        <select name="ComboMes">
          <option value="0">Mes</option>
          <option value="1">Enero</option>
          <option value="2" selected="selected">Febrero</option>
          <option value="3">Marzo</option>
          <option value="4">Abril</option>
          <option value="5">Mayo </option>
          <option value="6">Junio</option>
          <option value="7">Julio</option>
          <option value="8">Agosto</option>
          <option value="9">Septiembre</option>
          <option value="10">Octubre</option>
          <option value="11">Noviembre</option>
          <option value="12">Diciembre</option>
        </select>
        </label>
    </form></td>
    <td colspan="2">
        <a href="'
.$param.'&opc=dsp&ind=4&mes=0" target="opcion" ><img name="menu_r1_c4" src="images/menu_r1_c4.png" width="102" height="24" border="0" id="menu_r1_c4" alt="1" /></a></td>
 </tr>
  <tr>
    <td width="104" height="39" bgcolor="#77AB00">&nbsp;</td>
    <td colspan="1" valign="bottom" bgcolor="#77AB00"><span class="style3">PRODUCTIVIDAD </span> </td>
  </tr>
  <tr>
    <td bgcolor="#77AB00">&nbsp;</td>
    <td width="682" valign="top" align="center" bgcolor="#77AB00"><div id="main" align="center">
        <iframe name="opcion" src ="index2.html" width="100%" height="392px" FRAMEBORDER=0  align=middle > </iframe>   

</div></td>
    <td colspan="1" height="52" align="center" background="images/fondo.gif" valign="top"><img src="images/tit.png" width="173" height="52" align="top"/>
                <table width="179" border="0">
                <tr>
                        <td height="52" align="left" valign="top">dsasd sadasd asdasdas asdasda asdasasd asdasdas asdasdas asdasdas asdasdas adad sdas asdasdas sdasda sadasd asdasd asdasd asdasda asdasd aasdasd adasd asdasd adas asdasd asdasd asdasd asdasdasda gggggggggggggggggggggg asdasd asdasd czxc zczxcczx zxczx zczxzxcc </td>
                </tr>
        </table>
        </td>
  </tr>
  <tr>
    <td colspan="2" bgcolor="#77AB00"><div align="right"><img src="images/semicirculo.png" width="46" height="46" /></div></td>
    <td width="221" rowspan="3">&nbsp;</td>
  </tr>
  <tr>
    <td height="26" colspan="2" valign="bottom" bgcolor="#99CC00"><span class="style3 style10">Comentario del Director </span> </td>
  </tr>
  <tr>
    <td height="79" bgcolor="#60BCEB">&nbsp;</td>
    <td bgcolor="#60BCEB"><span class="style1"><strong>Productividad</strong>&nbsp;<br />
      -Obreg&oacute;n aumentando sus mermas, cuidemos el dato.<br />
      -Vallejo disminuyendo su n&uacute;mero sigamos esta tendencia<br />
      -El resto con buenos resultados sigamos as&iacute;.</span></td>
  </tr>
</table>




</body>
</html>

'
;
}
#------------------------------------#
#  Codifica usr. name  pepsico       #
#------------------------------------#
 sub codeusr {
    local($tipo) =$_[0];   #tipo
    local($l_str)=$_[1];   #usr code
    local($l_sn) =$_[2];   #Ses No.

    local($l_str2);
    local($l_i);
    local($l_j);
    local($l_k);
    local($l_l);

    $l_str2 = "";
 
    $l_sn = $l_sn.$l_sn.$l_sn;

    for ($l_i = 0;$l_i<length($l_str);$l_i++) {
     
      $l_j = ord( substr($l_str,$l_i,1) );
      $l_l = substr($l_sn,$l_i,1);

      if ($l_tipo eq "CODE") {
     
        if ($l_l > 4){
          $l_k = $l_l - 5;
        } else {
          $l_k = $l_l;
        }
     
        $l_j = $l_j + $l_k;
     
        if ( $l_j == 59 ) {
           $l_j = "40";
        }
     
        if ( $l_j == 61 ) {
          $l_j = "41";
        }

        if ( $l_j == 92 ) {
          $l_j = "33";
        }

      } else {
     
        if ( $l_j == 40 ) {
          $l_j = "59";
        }
     
        if ( $l_j == 41 ) {
          $l_j = "61";
        }
     
        if ( $l_j == 33 ) {
          $l_j = "92";
        }
     
        if ( $l_l > 4) {
          $l_k = $l_l - 5;
        } else {
          $l_k = $l_l;
        }
     
        $l_j = $l_j - $l_k
      }
 
      $l_str2=$l_str2.chr($l_j);

    }

    return  $l_str2;
 }

#-----------------------------------------------------------------------

#----------------------------------#
# Regresa hora y fecha actual      #
#----------------------------------#
sub fecha
{
local(@var);
local($fec);
local($hor);
local(@var)=localtime(time);
  $var[4]++;
  for($i=0;$i<7;$i++){ if (length($var[$i]) < 2) {$var[$i]="0".$var[$i]}; };
  if ($var[5]<90){$var[5]=$var[5]+2000}else{$var[5]=$var[5]+1900};
  $fec =$var[4]."/".$var[3]."/".$var[5];

return $fec;
}
 
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Entonces necesito pasar el valor de la función JavaScript en mes2
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  sub dsp_forma
 {

        $indicador=$in{"ind"};
        $mes2=JavaScript&#058;:valor_Combo();
 
 print '<iframe name="opcion2" src ="'.$tabla[$indicador][$mes2].'" width="100%" height="1000px" FRAMEBORDER=0  align=middle > </iframe>         ';

 }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2008-01-29 19:38 @859
por aneita
Lo que hace esto es que el
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <td bgcolor="#77AB00">&nbsp;</td> 
  2. <td width="682" valign="top" align="center" bgcolor="#77AB00"><div id="main" align="center"> 
  3. <iframe name="opcion" src ="index2.html" width="100%" height="392px" FRAMEBORDER=0 align=middle > </iframe> 
  4.  
  5. </div></td> 

me muestra una imagen y esto depende del mes que seleccione en el combo.

Me lee un archivo llamado tabla.txt donde está un arreglo de las imágenes que se van a mostrar al seleccionar el número del mes.

¡¡Espero que me entiendan y me puedan ayudar!!

¡¡Se los agradezco muchísimo!!

NotaPublicado: 2008-01-29 20:37 @901
por explorer
Lo que sospechaba...

Desde Perl en el lado del servidor, no puedes ejecutar una función JavaScript que está en el interior del cliente.

Humm... bueno, sí... pero bastante más complicado de lo que estás planteando. Y lo que planteas se puede resolver (al menos de lo poco que he entendido viendo tu código) de una forma más fácil.

A ver... el programa Perl (un CGI), genera un resultado en forma de HTML+JavaScript, que es lo que se envía al cliente. El cliente ve la lista desplegable, elige un valor y pulsa el botón de envío.

Al hacerlo, estamos ejecutando de nuevo el mismo cgi (en el lado del servidor). A este cgi se le pasan los valores que el usuario ha ingresado en el formulario, entre ellos, el valor del combo. Bueno, pues eso es lo que tienes que hacer: leer los parámetros pasados por el formulario form1. Y entonces, ya dispones del valor del combo para llamar a dsp_forma() y crear esa línea.

Lo que no puedes es llamar a funciones JavaScript que NO están siendo ejecutadas en el lado del servidor.

Es como si intentaras comprar caramelos con una plancha de impresión de billetes. Si, es un poco más pesado, pero tiene el aspecto de un billete, tiene el sello de la casa de la Moneda y del presidente del Banco Central, pero NO es un billete.

En tu caso, la "plancha" es el código HTML+JavaScript que reside dentro del cgi: no tiene vida porque no está siendo ejecutado en el mismo proceso que el propio cgi. Solo se activa cuando es interpretado y ejecutado por el cliente web del usuario. Debes leer lo que te devuelve ese usuario para saber qué valor del combo ha elegido. Y entonces ya tienes más información para hacer el iframe.

NotaPublicado: 2008-01-30 09:40 @444
por aneita
Bueno, muchísimas gracias por su ayuda, le digo que nunca había trabajado con Perl, así es que sí me cuesta un poco...

Justo es lo que intento hacer:
pues eso es lo que tienes que hacer: leer los parámetros pasados por el formulario form1. Y entonces, ya dispones del valor del combo para llamar a dsp_forma() y crear esa línea.


Leer los parámetros y pasárselos a dsp_forma(), pero no tengo la más remota idea de cómo se hace eso. ¿Me podría orientar? ¡¡Muchísimas gracias!!

NotaPublicado: 2008-01-31 06:29 @312
por explorer
Debería estar dentro de la variable $in{"ComboMes"}.