• Publicidad

Mandar llamar función JavaScript en una variable de Perl

Discute todo acerca de JavaScript así como DHTML o la tecnología AJAX.

Mandar llamar función JavaScript en una variable de Perl

Notapor aneita » 2008-01-29 18:43 @821

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!!
aneita
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-29 18:35 @816

Publicidad

Notapor explorer » 2008-01-29 19:20 @847

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...
Última edición por explorer el 2008-01-29 20:19 @888, editado 1 vez en total
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 aneita » 2008-01-29 19:32 @855

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
aneita
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-29 18:35 @816

Notapor aneita » 2008-01-29 19:38 @859

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!!
aneita
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-29 18:35 @816

Notapor explorer » 2008-01-29 20:37 @901

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.
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 aneita » 2008-01-30 09:40 @444

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!!
aneita
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-29 18:35 @816

Notapor explorer » 2008-01-31 06:29 @312

Debería estar dentro de la variable $in{"ComboMes"}.
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


Volver a JavaScript

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron