Foros del Web » Programando para Internet » PHP »

llamar un javascript desde php

Estas en el tema de llamar un javascript desde php en el foro de PHP en Foros del Web. hola, soy nuevo en el foro pero os leo desde hace tiempo, sobretodo desde hace unos meses. estoy haciendo una web simple en php y ...
  #1 (permalink)  
Antiguo 02/05/2011, 12:26
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Pregunta llamar un javascript desde php

hola,
soy nuevo en el foro pero os leo desde hace tiempo, sobretodo desde hace unos meses.

estoy haciendo una web simple en php y ajx en la que se modifica un mapa de googlemaps.

he estado leyendo varios posts del foro pero no he conseguido nada.

tengo lo siguiente:
un mapa de google maps y una combo box donde al seleccionar una ciudad se llama a un script ajax que a su vez llama a un php que busca la información en la base de datos y la muestra en el sitio correspondiente
Código PHP:
echo '<option value="">escoja una ciudad</option>';
                while(
$row mysql_fetch_array($result)){ 
                    
                    
//cuando se clicka en la ciudad se muestra la query contenida en infociudad
                    
echo '<option value="'.$row['nomCiutat'].'" onclick="mostrar(\'infoCiudad.php?city='.$row['nomCiutat'].'\',\'infoCiudad\');">'.$row['nomCiutat'].'</option>'
dentro de infociudad.php llamo a una función a la que le paso una latitud y longitud, recuperado tb de la base de datos, para que reubique el mapa:

Código PHP:
call_user_func('moveMap',$lat$long$nombreciudad); 
y el códico de la función:

Código PHP:
function moveMap($lat$long$nombreciudad){
    
    echo 
"<script languaje='text/javascript'>gotoMap(".$lat.",".$long.",'".$nombreciudad."');</script>";//
    
echo "</br>MOVIENDO EL MAPA";

pues gotoMap no se ejecuta. he probado de todas las maneras que he podido ver en el foro.

he probado incluso creando un mapa nuevo con la función create map de la API de google maps, pero ni así.

alguien puede echarme una mano? muachas gracias!
  #2 (permalink)  
Antiguo 02/05/2011, 12:32
Avatar de Hugo_Euan  
Fecha de Ingreso: abril-2011
Ubicación: Mérida, Yucatán, México
Mensajes: 193
Antigüedad: 13 años
Puntos: 71
Respuesta: llamar un javascript desde php

Intena de la siguiente manera

echo '<script>gotoMap('.$lat.', '.$long.', \''.$nombreciudad.'\');</script>';

puede ser que el uso de <script languaje='text/javascript'> este esperando el tag Src y es por eso que proboca error interno... ademas el concatenamiento que utilizas no es del todo correcto, es por eso que se usan los escapes para poder llevar un mejor orden el las concatenaciones ---> \'

espero que te sea de ayuda y comentas si te funcionó

EXITO !!!!
__________________
Se acepta Karma (:

Si Dios con nosotros, quien contra nosotros !!
  #3 (permalink)  
Antiguo 02/05/2011, 12:38
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

hola, gracias por responder

no ha funcionado, he modificado la función, pero no ha hecho nada, la información la recoge bien, pero no llama al js.

he probado tb a crear un nuevo mapa dentro del canvas (algo que me funcionaba con un html simple con js) pero tampoco...

:(

el script de google maps es el siguiente:

Código:
var map;
var lat_ini = 41.387917;
var long_ini = 2.169919;
var zoom_ini = 7;
var zoom_final = 5;
var gMyCanvas;

/**
 * función para crear el mapa inicial, se carga en el onload del la página
 * @param mycanvas
 */
function createInitMap(mycanvas) {
	gMyCanvas = mycanvas;
	var latlng = new google.maps.LatLng(lat_ini,long_ini);
	var myOptions = {
      zoom: zoom_ini,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.HYBRID
    };
	map = new google.maps.Map(document.getElementById(gMyCanvas), myOptions);
}
/**
 * función para poner los markers en el mapa
 * @param lat
 * @param long
 * @param name
 */
function createMarkers(lat,long,name){
	var latlng = new google.maps.LatLng(lat,long);
	var marker = new google.maps.Marker({
		position: latlng, 
		map: map, 
		title:name
		});
}
/**
 * función para centrar el mapa en un punto depués de seleccionar en la combobox
 * @param lat
 * @param long
 * @param name
 */	
function gotoMap(lat,long,name) {
	var latlng = new google.maps.LatLng(lat,long);
	map.setZom(zoom_final);
	map.setCenter(latlng);
}

function prueba() {
	
	var latlng = new google.maps.LatLng(44,-3.7);
	var myOptions = {
      zoom: zoom_final,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.HYBRID
    };
	map = new google.maps.Map(document.getElementById(gMyCanvas), myOptions);
}

Última edición por sergioloud; 02/05/2011 a las 12:44 Razón: añadir información adicional
  #4 (permalink)  
Antiguo 02/05/2011, 12:48
Avatar de Sotelio  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Chile
Mensajes: 68
Antigüedad: 12 años, 11 meses
Puntos: 21
Respuesta: llamar un javascript desde php

Hola

Nunca he programado sobre googlemaps pero escribo para comentar algo que pareció extraño.

Cuando visualizas el mapa y seleccionas una ciudad, quieres que el mapa cambie. Esta modificación se hace con el mapa ya cargado, por lo tanto debiera ser una función javascript. La llamada ajax la usas sólo para obtener datos de la ciudad que luego debes agregar al mapa.

Lo que no entiendo o me parece extraño es que la función call_user_func() sea una función php, y que con ella intentes cambiar el mapa.

Yo creo que la misma función mostrar() que es javascript, debiera ejecutar el gotoMap() después de hacer la llamada a infoCiudad.php

Sotelio
  #5 (permalink)  
Antiguo 02/05/2011, 12:53
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

gracias, pues el problema es que necesito la latitud y la longitud de la ciudad para llamar al script.
los datos se recuperan en infociudad.php

ayer probé a poner mostrar(infociudad.php....);mostrar(gotoMap(lat,lo ng,nombreciudad) pero o lo hice mal o no funcionó

lo voy a probar de nuevo
  #6 (permalink)  
Antiguo 02/05/2011, 12:58
Avatar de Sotelio  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Chile
Mensajes: 68
Antigüedad: 12 años, 11 meses
Puntos: 21
Respuesta: llamar un javascript desde php

Lo que debes hacer es llamar a infoCiudad.php por medio de javascript/ajax y luego capturar los valores que entregue ese archivo.

Los valores que muestre podrían ser así:
Código PHP:
echo "$latitud;$longitud;$ciudad"
Y luego al capturarlos en otra función, suponiendo que la variable datos los almacena:

Código Javascript:
Ver original
  1. var aux = datos.split(";");
  2. gotoMap(aux[0], aux[1], aux[2]) ;

Sotelio
  #7 (permalink)  
Antiguo 02/05/2011, 13:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

interesante...

he probado lo siguiente:
Código PHP:
echo '<option value="'.$row['nomCiutat'].'" onclick="mostrar(\'infoCiudad.php?city='.$row['nomCiutat'].'\',\'infoCiudad\');mostrar(\'gotoMap.php?city='.$row['nomCiutat'].'\',\'map_canvas\');">'.$row['nomCiutat'].'</option>'
pero no muestra nada... quiero decir que me pone los <div> correspondientes en blanco, no sale nada de información de la que salía antes

a ver lo que me comentas

Última edición por sergioloud; 02/05/2011 a las 13:01 Razón: completar
  #8 (permalink)  
Antiguo 02/05/2011, 13:08
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

lo que me comentas es parecido a lo que hago en gotoMap.php

ahí hago una nueva llamada a la base de datos, donde recupero la información, pero esta vez en vez de mostrar el resultado en el div infociudad lo muestro en map_canvas, que es donde se muestra el mapa.

no funciona :(
  #9 (permalink)  
Antiguo 02/05/2011, 13:11
Avatar de Sotelio  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Chile
Mensajes: 68
Antigüedad: 12 años, 11 meses
Puntos: 21
Respuesta: llamar un javascript desde php

Lo que sucede es que la función mostrar hace una llamada ajax y por defecto carga el contenido en un div o contenedor. Necesitamos una función que lea el contenido y lo capture o guarde en una variable, como el ejemplo que puse antes.

Puedes pegar la función mostrar() ??

Última edición por Sotelio; 02/05/2011 a las 13:22
  #10 (permalink)  
Antiguo 02/05/2011, 13:22
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

este es

Código:
function mostrar(url,id){
	divR = document.getElementById(id);
	divR.innerHTML = '<img src="images/loader.gif"/>';//<img src="images/ajax-loader.gif"/>';
	ajax = crearMotorAJAX();
	ajax.open("GET",url);
	ajax.onreadystatechange = function(){
		if (ajax.readyState==4){//ready state 4 quiere decir que ha terminado, mirar de hacer constantes con esto
			divR.innerHTML = ajax.responseText;
		}
	}
  #11 (permalink)  
Antiguo 02/05/2011, 13:29
Avatar de Sotelio  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Chile
Mensajes: 68
Antigüedad: 12 años, 11 meses
Puntos: 21
Respuesta: llamar un javascript desde php

Haz lo siguiente, en vez de llamar a mostrar() llama a cambiar_mapa():

Código Javascript:
Ver original
  1. function cambiar_mapa(url){
  2.     ajax = crearMotorAJAX();
  3.     ajax.open("GET",url);
  4.     ajax.onreadystatechange = function(){
  5.         if (ajax.readyState==4){
  6.                         datos = ajax.responseText;
  7.                          var aux = datos.split(";");
  8.                          gotoMap(aux[0], aux[1], aux[2])
  9.         }
  10.     }
  11. }

Y en infoCiudad.php al final del archivo haz:
Código PHP:
Ver original
  1. echo "$latitud;$longitud;$ciudad";

Donde obviamente los valores de las variables $latitud, $longitud y $ciudad sean los de la ciudad a la que desees cambiar.
  #12 (permalink)  
Antiguo 02/05/2011, 14:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Tema movido desde PHP a APIs y Servicios
  #13 (permalink)  
Antiguo 02/05/2011, 15:37
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

pues me temo que no ha funcionado...

gracias de todos modos, mañana será un nuevo día...
  #14 (permalink)  
Antiguo 09/05/2011, 11:44
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

bueno, he vuelto a probar lo que me comentáis con alguna modificación.
en vez de modificar el mostrar he llamado directamente al script que modifica el mapa.

Código:
function gotoMap() {
	datos = ajax.responseText;
        var aux = datos.split(";");
	var latlng = new google.maps.LatLng(aux[1],aux[2]);
	map.setZoom(zoom_final);
	map.setCenter(latlng);
}

funciona!

el problema es que no debe cojer bien los datos con el split, por que me pone el mapa en blanco. puede ser por que antes del echo pongo más información y realmente no se a partir de donde hace el split...
Código PHP:
echo $row['info'];
echo 
"$lat;$long;$nombreciudad"
voy a ver si lo puedo hacer de otra manera.

muchas gracias!
  #15 (permalink)  
Antiguo 17/05/2011, 01:43
 
Fecha de Ingreso: marzo-2011
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 1
Mensaje Respuesta: llamar un javascript desde php

Buenas Sergio,

En la función cambiar_mapa(url), deberías indicar que la llamada del AJAX sea síncrono (en este caso te interesa que hasta que no termine de ejecutarse no continue el código). Es por eso que no te está funcionando, porque cuando llama a gotoMap, no tiene los valores aún.

Por lo tanto deberías cambiar en la función cambiar_mapa(url) lo siguiente:
Código:
function cambiar_mapa(url){
  ajax = crearMotorAJAX();
  ajax.open("GET",url, false);
  ajax.onreadystatechange = function(){
     if (ajax.readyState==4){
         datos = ajax.responseText;
         var aux = datos.split(";");
         gotoMap(aux[0], aux[1], aux[2])
     }
  }
}
Prueba a ver si así te funciona.

¿Que tal por el Perigord? :P
  #16 (permalink)  
Antiguo 17/05/2011, 10:59
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

hola ivan!
gracias por la respuesta, lo he probado y no se qué hago mal. no funciona
ahora se queda pensando y ni si quiera sale la información de la base de datos sobre la ciudad.

en fin, seguiré probando. pero creo que a lo mejor la solución sería que en el script llamase a la bbdd para obtener los datos, algo que no se si se puede hacer, pero que voy a investigar.

gracias.
p.d: el perigord, genial, a que sí? :)
  #17 (permalink)  
Antiguo 17/05/2011, 11:16
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

Cita:
Iniciado por sergioloud Ver Mensaje
hola ivan!
gracias por la respuesta, lo he probado y no se qué hago mal. no funciona
ahora se queda pensando y ni si quiera sale la información de la base de datos sobre la ciudad.

en fin, seguiré probando. pero creo que a lo mejor la solución sería que en el script llamase a la bbdd para obtener los datos, algo que no se si se puede hacer, pero que voy a investigar.

gracias.

pues no se puede, en teoría

buffffffff
  #18 (permalink)  
Antiguo 17/05/2011, 12:55
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

bueno, esto es lo que he hecho...

viendo como hacer $_SESSION para cambiar de idioma la página he visto que se podía llamar a un php desde script. debe ser de manera indirecta.

no me funciona, pero ahora me sale otro error que he estado buscando y no se qué puede ser...

ahora, en la combo donde se selecciona la ciudad he puesto:
Código PHP:
//cuando se clicka en la ciudad se muestra la query contenida en infociudad
echo '<option value="'.$nombreciudad.'" action="" onclick="mostrar(\'infoCiudad.php?city='.$nombreciudad.'\',\'infoCiudad\');modMap('.$nombreciudad.')">'.$nombreciudad.'</option>'
donde modMap('.$nombreciudad.') llama a un script que es el siguiente:

Código:
/**
 * función ajax para modificar sobre el mapa, no pido el id
 * @param city
 */
function modMap(city){
	
	ajax = crearMotorAJAX();
	ajax.open("GET", "gotoMap.php?city="+city, true);
	ajax.onreadystatechange = function(){
		if (ajax.readyState==4){//ready state 4 quiere decir que ha terminado, mirar de hacer constantes con esto
			ajax.responseText;
			var aux = datos.split(";");
	         gotoMap(aux[0], aux[1], aux[2]);
		}
	};
	ajax.send(null);
}
al cargar la página ahora y seleccionar una ciudad, me pone la info de la base de dato pero en la consola me sale lo siguiente:

Error: Barcelona is not defined
Archivo de origen: http://localhost/tuturista/webajax/index.php
Línea: 1

he buscado por internet y en el foro, pero no me aclaro...
  #19 (permalink)  
Antiguo 18/05/2011, 16:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

hola,

al final, gracias a rosillo y unos intercambios de mails, hemos podido solucionar este tema.

para empezar, no me estaba pillando bien el datos.split por el echo
concretamente quedó así

Código PHP:
$ciudad $_GET["city"];
    
$con = new conectDb();
    if(
$con->conectar() == true){
        
$query ="SELECT * FROM city WHERE nomCiutat ='$ciudad'";
        
$result = @mysql_query($query);
        if(!
$result){
            echo 
"ERROR EN EL RESULTADO DE LA TABLA;NO SE ENCONTRÓ NADA";
        }else{
            
$row mysql_fetch_array($result); //me devuelve el registro entero (si hay varios necesitaré un while)
            
$nombreciudad $row['nomCiutat'];//nomciudad es el nombre del campo en la tabla
            
$lat $row['coordLat'];
            
$long $row['coordLong'];
            echo 
$lat.";".$long.";".$nombreciudad.";";     
        } 
concretamente echo $lat.";".$long.";".$nombreciudad.";";

luego otra cosa que no sabía han sido los comentarios en los fuentes. en los php estaba poniendo los comentarios como si fuera un html con <!-- --> fuera del php arriba del todo, se ha cambiado a dentro del <?php con el formato habitual // o /*

qué más...
a ver, la función ajax para hacer la llamada también la cambié, creo que lo puse en el post anterior, pero lo vuelvo a poner aquí:

Código:
/**
 * función ajax para modificar sobre el mapa, no pido el id
 * @param city
 */
function modMap(city){
	
	ajax = crearMotorAJAX();
	ajax.open("GET", "gotoMap.php?city="+city, false);
	ajax.onreadystatechange = function(){
		if (ajax.readyState==4){//ready state 4 quiere decir que ha terminado, mirar de hacer constantes con esto
			datos = ajax.responseText;
			var aux = datos.split(";");
	         gotoMap(aux[0], aux[1], aux[2]);
		}
	};
	ajax.send(null);
}
y creo que ya está...

gracias a todos (sobretodo a rosillos) y si tengo más problemas volveré.
  #20 (permalink)  
Antiguo 18/05/2011, 16:03
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: llamar un javascript desde php

gracias a sotelio tb, que me encauzó con el datos.split
:)

Etiquetas: ajax, google, maps
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 05:44.