Foros del Web » Programando para Internet » Javascript »

Envio de dato dentro de una funcion recursiva

Estas en el tema de Envio de dato dentro de una funcion recursiva en el foro de Javascript en Foros del Web. Hola!! Tengo un script que utilizo para rotar banners, pues quiero que estos banners se muestren segun corresponda a la ciudad que hayan elegido, pues ...
  #1 (permalink)  
Antiguo 07/04/2003, 10:46
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
Envio de dato dentro de una funcion recursiva

Hola!!

Tengo un script que utilizo para rotar banners, pues quiero que estos banners se muestren segun corresponda a la ciudad que hayan elegido, pues tengo lo siguiente:

La función que realiza la rotación es la siguiente:

function miBannera(ciudad)
{ var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad+'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera('guadalajara') ", 5000);
}

Mi problema es que recibe bien el valor de la ciudad pero dentro de esta función cuando la vuelvo a llamar no toma la variable, lo pongo de la siguiente manera:

setTimeout("miBannera(ciudad) ", 5000);

y esto no funciona me marca el error: "ciudad no esta definido"

y como funciona es de esta manera:

setTimeout("miBannera('guadalajara') ", 5000);

pero yo necesito que el valor no sea fijo si no que tome el valor de una variable.

qué debo hacer???

gracias por su atención.

Saludos!!
  #2 (permalink)  
Antiguo 07/04/2003, 10:56
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
No acabo de comprender muy bien, pero a ver si esto te sirve





function miBannera(ciudad)
{
ciudad2=ciudad
var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad+'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera(ciudad2) ", 5000);
}

Añade y/o cambia lo qe está en negritas y me cuentas.

saludos
  #3 (permalink)  
Antiguo 07/04/2003, 11:12
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
gracias tunait, pero eso ya lo he intentado y no funciona me marca el error de que esa variable no esta definida, por todas las pruebas que he realizado es necesario que incluya los ' ' , es decir de la siguiente manera:

function miBannera(ciudad)
{
ciudad2=ciudad ;
var ciudad2=ciudad;
var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad+'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera('ciudad2' )", 5000);
}

pero de esta manera a ciudad2 lo toma con un valor y no como una variable.
  #4 (permalink)  
Antiguo 07/04/2003, 11:34
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Dime cómo llamas a la función la primera vez
  #5 (permalink)  
Antiguo 07/04/2003, 11:56
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
como esto y utilizando php lo hago de la siguiente manera:

mostrarBannera('<?echo $varciudad;?>')

envió la ciudad que eligieron y dentro de esta función llamó la que rota los banners

function mostrarBannera(ciudad)
{
var valor= ciudad;
maximoa = Bannersa.recordset.recordCount;
var ia = 0;
while(!Bannersa.recordset.eof){
urlBannera[ia] = new String(Bannersa.recordset.fields("URL"));
imgBannera[ia] = new String(Bannersa.recordset.fields("IMG"));
targetBannera[ia] = new String(Bannersa.recordset.fields("TARGET"));
altBannera[ia] = new String(Bannersa.recordset.fields("ALT"));
Bannersa.recordset.moveNext();
ia++;
}
miBannera(valor);
}
  #6 (permalink)  
Antiguo 07/04/2003, 12:18
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
La primera vez que llama a la función le llega correcta la variable de la ciudad??

Me ayudaría poder ver el script en marcha ¿se puede ver en algún sitio??
  #7 (permalink)  
Antiguo 07/04/2003, 12:26
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
el valor llega correctamente, porque dentro de la función utilizo ese valor :

function miBannera(ciudad)
{
var ciudad2=ciudad;
var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad +'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera('guadalajara')", 5000);
}

toma el valor que debe, en este caso entra a una carpeta llamada guadalajara.
  #8 (permalink)  
Antiguo 07/04/2003, 12:34
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
no la tengo en line
  #9 (permalink)  
Antiguo 07/04/2003, 12:37
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Me interesa sobre todo ver el código resultante una vez se ha ejecutado la parte de php.

Haz una cosa, ejecuta el php y haz un copipaste del código fuente resultante en el navegador y me lo pegas
  #10 (permalink)  
Antiguo 07/04/2003, 12:45
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
el código que corresponde únicamente es este:

<SCRIPT LANGUAGE="javascript">
var urlBannera = new Array(maximoa);
var imgBannera = new Array(maximoa);
var targetBannera = new Array(maximoa);
var altBannera = new Array(maximoa);
var maximoa;

function mostrarBannera(ciudad)
{
var valor= ciudad;
maximoa = Bannersa.recordset.recordCount;
var ia = 0;
while(!Bannersa.recordset.eof){
urlBannera[ia] = new String(Bannersa.recordset.fields("URL"));
imgBannera[ia] = new String(Bannersa.recordset.fields("IMG"));
targetBannera[ia] = new String(Bannersa.recordset.fields("TARGET"));
altBannera[ia] = new String(Bannersa.recordset.fields("ALT"));
Bannersa.recordset.moveNext();
ia++;
}
miBannera(valor);
}

function miBannera(ciudad)
{
var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad +'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera('guadalajara')", 5000);
}
</SCRIPT>

<SPAN ID="bannera"></SPAN>
<OBJECT ID="Bannersa" CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83" ondatasetcomplete="mostrarBannera('guadalajara')" width="192" height="90">
<PARAM NAME="DataURL" Value="actualizacion/banners/guadalajara/bannersa.txt">
<PARAM NAME="UseHeader" Value="true">
<PARAM NAME="FieldDelim" VALUE=",">
</OBJECT>


y me acabo de dar cuenta que donde utilizo otra vez el valor de esa variable "ciudad" no lo esta tomando, pero es muy raro porque las imagenes si las esta tomando de la carpeta correspondiente, en este caso "guadalajara"
  #11 (permalink)  
Antiguo 07/04/2003, 13:12
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Serenity,

me pones de nuevo el código antes de ser ejecutado por el servidor y no puedo saber cual es el resultante real, el código fuente tal y como lo va a leer el navegador.

Donde tienes maximoa = Bannersa.recordset.recordCount; eso es lado servidor, no lo ejecuta el navegador. No sé los valores de las variables que se han de pasar.

Carga la página en el explorer y pidele ver código fuente. Ese código es el que necesito ver para ver dónde está el fallo
  #12 (permalink)  
Antiguo 07/04/2003, 13:21
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
el código sin ejecutar es este:

<SCRIPT LANGUAGE="javascript">
var urlBannera = new Array(maximoa);
var imgBannera = new Array(maximoa);
var targetBannera = new Array(maximoa);
var altBannera = new Array(maximoa);
var maximoa;

function mostrarBannera(ciudad)
{
var valor= ciudad;
maximoa = Bannersa.recordset.recordCount;
var ia = 0;
while(!Bannersa.recordset.eof){
urlBannera[ia] = new String(Bannersa.recordset.fields("URL"));
imgBannera[ia] = new String(Bannersa.recordset.fields("IMG"));
targetBannera[ia] = new String(Bannersa.recordset.fields("TARGET"));
altBannera[ia] = new String(Bannersa.recordset.fields("ALT"));
Bannersa.recordset.moveNext();
ia++;
}
miBannera(valor);
}

function miBannera(ciudad)
{
var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad+'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera('guadalajara')", 5000);
}
</SCRIPT>
//código php <?
switch($ciudad){
case "Queretaro":
$varciudad="leon";
break;
case "Celaya":
$varciudad="celaya";
break;
case "Guadalajara":
$varciudad="guadalajara";
break;
case "Tepatitlán":
$varciudad="tepatitlan";
break;
case "Lagos de Moreno":
$varciudad="lagosdemoreno";
break;
}
?>
//fin código php

<SPAN ID="bannera"></SPAN>
<OBJECT ID="Bannersa" CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83" ondatasetcomplete="mostrarBannera('<?echo $varciudad;?>')" width="192" height="90">
<PARAM NAME="DataURL" Value="actualizacion/banners/<?echo $varciudad;?>/bannersa.txt">
<PARAM NAME="UseHeader" Value="true">
<PARAM NAME="FieldDelim" VALUE=",">
</OBJECT>


Esto es el código ejecutado

<SCRIPT LANGUAGE="javascript">
var urlBannera = new Array(maximoa);
var imgBannera = new Array(maximoa);
var targetBannera = new Array(maximoa);
var altBannera = new Array(maximoa);
var maximoa;

function mostrarBannera(ciudad)
{
var valor= ciudad;
maximoa = Bannersa.recordset.recordCount;
var ia = 0;
while(!Bannersa.recordset.eof){
urlBannera[ia] = new String(Bannersa.recordset.fields("URL"));
imgBannera[ia] = new String(Bannersa.recordset.fields("IMG"));
targetBannera[ia] = new String(Bannersa.recordset.fields("TARGET"));
altBannera[ia] = new String(Bannersa.recordset.fields("ALT"));
Bannersa.recordset.moveNext();
ia++;
}
miBannera(valor);
}

function miBannera(ciudad)
{
var ciudad2=ciudad;
var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad+'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera('guadalajara')", 5000);
}
</SCRIPT>
<SPAN ID="bannera"></SPAN>
<OBJECT ID="Bannersa" CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83" ondatasetcomplete="mostrarBannera('guadalajara')" width="192" height="90">
<PARAM NAME="DataURL" Value="actualizacion/banners/guadalajara/bannersa.txt">
<PARAM NAME="UseHeader" Value="true">
<PARAM NAME="FieldDelim" VALUE=",">
</OBJECT>
  #13 (permalink)  
Antiguo 07/04/2003, 13:31
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Sucede que la funcion mostrarBannera(ciudad) debe ejecutarse en el servidor, no debiera de llegar ese código al navegador. Con javascript del lado cliente no puedes acceder con un recordset a ningún dato.

El object que tienes incrustado en la parte de abajo qué es??
  #14 (permalink)  
Antiguo 07/04/2003, 15:35
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
es un objeto que utilizo para mostrar los datos en este caso los banners que se leen desde un archivo es por eso que utilizo el recordset, este escript fue creado por jlmm que puedes encontrar http://www.forosdelweb.com/showthrea...hlight=banners

  #15 (permalink)  
Antiguo 08/04/2003, 08:51
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
por fin, resuelto

resulta que el error estaba en que tenía que concatenar los ' ', y queda de la siguiente manera:

function miBannera(ciudad)
{
var cuala = Math.floor(Math.random() * maximoa);
var codigoa = '<A HREF="'+urlBannera[cuala]+'" TARGET="'+targetBannera[cuala]+'"><IMG SRC="actualizacion/banners/'+ciudad +'/'+imgBannera[cuala]+'" ALT="'+altBannera[cuala]+'" BORDER=0 WIDTH=165 HEIGHT=89></A>';
bannera.innerHTML = codigoa;
setTimeout("miBannera('"+ciudad+"')" , 5000);
}



saludos!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:37.