[Php-avanzado] consulta jquery para la tesis

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Sab Jun 1 19:15:14 ART 2013


Cesar:

	Quiero volver a una cuestión que Matías platea muy correctamente: no
tiene sentido hacer varias llamadas AJAX en un bucle, porque si te hace
falta todo esto, devolvelo ya cargado desde el servidor y listo!
	Más allá del problema de sintaxis que haya, no es un uso razonable de
AJAX, ya que es más lento todo esto que cargar los valores desde el
principio.

	Acordate del "principio de programación KISS" !!!



El sáb, 01-06-2013 a las 15:52 -0300, Cesar Gimenez Lascano escribió:
> la del ultimo registro de la tabla de la base de datos
> 
> 
> El 1 de junio de 2013 15:51, Cesar Gimenez Lascano
> <cesargimenezlascano en gmail.com> escribió:
>         perdón mati, me adelante. El popup muestra bien la info de la
>         segunda llamada, pero de la primera muestra en todos los
>         popups la misma info. 
>         
>         
>         El 1 de junio de 2013 15:36, Cesar Gimenez Lascano
>         <cesargimenezlascano en gmail.com> escribió:
>         
>                 Genio Matias!!! anduvo de 10!!!! ahí entendí cual era
>                 mi error, muchas gracias de verdad.Ya que estoy y sin
>                 animo de abusar quisiera preguntarte, necesito tmb que
>                 el popup muestre información de una llamada ajax mas,
>                 donde encajaría en el nuevo código que me pasaste?
>                 abrazo!!!
>                 
>                 
>                 El 1 de junio de 2013 14:46, Matias Gea
>                 <matigea en gmail.com> escribió:
>                 
>                         El problema lo tenés, probablemente acá:
>                         var marker = new L.Marker(location, {title:
>                         nombre, icon: myIcon});// creo el marcador
>                         //llamo a la api de foursquare
>                         $.getJSON('https://api.foursquare.com/v2/venues/'+fourID+'/tips?sort=recent&limit=2&client_id=315YX0EUHY5VW5SFVCPIBMMVYTSNCXNML20AHEEDL1Q2TMEE&client_secret=HOJHGWETZPZYXLS2NYSPMUO0A4WO2UQCUHVWEAXQWAOWROZ2', function(data2) {
>                         var tip1 = data2.response.tips.items[0].text;
>                         var tip2 = data2.response.tips.items[1].text;
>                         marker.bindPopup("<div class='popup'>" +
>                         "<span class='titulo'>"+ nombre +"</span>"
>                         +"</br>"+ dir +"</br>"+ tel +"</br>"+ tip1
>                         +"</br>"+ tip2 + "</div>", {maxWidth:
>                         '600'}); // creo el popup 
>                         });
>                         
>                         
>                         Fijate que estás declarando una variable
>                         marker (en el for) y la utilizás para
>                         relacionar el popup después que se resuelve el
>                         request asincrónico. En ese momento (cuando
>                         terminan los requests) ya finalizó hace rato
>                         el for y marker queda con el útlimo valor.
>                         Tenés que hacer que marker sea constante en la
>                         función onSuccess del getJSON, así:
>                         
>                         
>                         var marker = new L.Marker(location, {title:
>                         nombre, icon: myIcon});// creo el marcador
>                         //llamo a la api de foursquare
>                         $.getJSON(
>                         'https://api.foursquare.com/v2/venues/'+fourID
>                         +'/tips?sort=recent&limit=2&client_id=315YX0EUHY5VW5SFVCPIBMMVYTSNCXNML20AHEEDL1Q2TMEE&client_secret=HOJHGWETZPZYXLS2NYSPMUO0A4WO2UQCUHVWEAXQWAOWROZ2',
>                         (function(marker){
>                         return function(data2) {
>                         var tip1 = data2.response.tips.items[0].text;
>                         var tip2 = data2.response.tips.items[1].text;
>                         marker.bindPopup("<div class='popup'>" +
>                         "<span class='titulo'>"+ nombre +"</span>"
>                         +"</br>"+ dir +"</br>"+ tel +"</br>"+ tip1
>                         +"</br>"+ tip2 + "</div>", {maxWidth:
>                         '600'}); // creo el popup 
>                         }
>                         })(marker)
>                         );
>                         
>                         
>                         
>                         
>                         Probalo y contame.
>                         
>                         
>                         Saludos! 
>                         
>                         
>                         
>                         
>                         El 1 de junio de 2013 14:39, Cesar Gimenez
>                         Lascano <cesargimenezlascano en gmail.com>
>                         escribió:
>                         
>                                 Hola Matias!! mil gracias x la
>                                 respuesta!!, te envío directamente
>                                 toda la pagina, espero se entienda el
>                                 código. Lo que ves son varios links
>                                 (alojamientos, comercios, etc) que al
>                                 hacer click llaman a una función js
>                                 (getAlojs(), getComes(), etc ) que
>                                 trae datos desde la base de datos
>                                 (primer llamada ajax) y con ellos
>                                 crear una capa de marcadores y sus
>                                 popups y agrega todo a un mapa, con la
>                                 ayuda de una biblioteca js de mapping
>                                 que se llama leaflet. La segunda
>                                 llamada ajax (la que esta dentro del
>                                 for) se realiza a un servidor remoto
>                                 (la API del sitio foursquare en este
>                                 caso), los popups contienen
>                                 información proveniente de ambas
>                                 llamadas, por eso no veo como asociar
>                                 su creación a un evento onClick y los
>                                 cacheo a todos. Fijate que las dos
>                                 llamadas ajax las estoy probando solo
>                                 en la función getResto(), el resto de
>                                 los popups muestra solo info de la
>                                 base de datos y anda a la perfección.
>                                 Espero puedas ayudarme, saludos!!!
>                                 
>                                 
>                                 El 1 de junio de 2013 14:04, Cesar
>                                 Gimenez Lascano
>                                 <cesargimenezlascano en gmail.com>
>                                 escribió:
>                                 
>                                         Hola leo! gracias x la
>                                         respuesta!.
>                                         Efectivamente $.getJSON() hace
>                                         una llamada AJAX asincrónica
>                                         utilizando el framework JQuery
>                                         (linkeo a documentación
>                                         oficial x si sirve). Estuve
>                                         revisando mejor el resultado y
>                                         en realidad me muestra el
>                                         ultimo popup, así que puede
>                                         estar sucediendo lo que
>                                         comentas del bucle, lo del
>                                         nombre igual de variables no
>                                         es el problema, si.
>                                         
>                                         
>                                         El 31 de mayo de 2013 20:52,
>                                         Leonardo Tadei - Pegasus Tech
>                                         Supply
>                                         <leonardot en pegasusnet.com.ar>
>                                         escribió:
>                                         
>                                                 Ufff... faltan muchos
>                                                 detalles para empezar
>                                                 a adivinar qué puede
>                                                 estar
>                                                 
>                                                 pasando!
>                                                 
>                                                 Asumiendo que
>                                                 $.getJSON() hace algún
>                                                 tipo de llamada AJAX
>                                                 usando el
>                                                 framework JQuery, y
>                                                 asumiendo que las
>                                                 llamadas sean
>                                                 asincrónicas, lo que
>                                                 puede estarte pasando
>                                                 es que las llamadas a
>                                                 $.getJSON() adentro
>                                                 del
>                                                 bucle no alcancen a
>                                                 terminar antes de que
>                                                 vuelva a ser invocada
>                                                 en el
>                                                 próximo ciclo.
>                                                 
>                                                 Si lo que se ve es la
>                                                 primera en vez de la
>                                                 última, supongo que es
>                                                 por la
>                                                 implementación de la
>                                                 biblioteca, pero
>                                                 habría que destriparla
>                                                 para estar
>                                                 seguros.
>                                                 
>                                                 No debe ser el
>                                                 problema, pero que
>                                                 ambas funciones
>                                                 anónimas usen como
>                                                 parámetro la variable
>                                                 "data" a mi de eriza
>                                                 los pelos de la nuca,
>                                                 por el
>                                                 ámbito de las
>                                                 variables en
>                                                 JavaScript respecto de
>                                                 las funciones, que es
>                                                 mucho más amplio que
>                                                 en otros lenguajes.
>                                                 
>                                                 Espero que alguien que
>                                                 sepa más que yo de
>                                                 JQuery nos ayude a
>                                                 entender
>                                                 qué es lo que pasa.
>                                                 
>                                                 
>                                                 El vie, 31-05-2013 a
>                                                 las 19:56 -0300, Cesar
>                                                 Gimenez Lascano
>                                                 escribió:
>                                                 > Hola, tengo un
>                                                 problema con un código
>                                                 para armar una capa de
>                                                 > marcadores, con su
>                                                 respectiva ventana de
>                                                 información (popups),
>                                                 y
>                                                 > agregarla a un mapa.
>                                                 El código como está
>                                                 crea todos los
>                                                 marcadores
>                                                 > pero solo el primer
>                                                 popup. Es que la
>                                                 función data del
>                                                 segundo llamado
>                                                 > $.getJSON se ejecuta
>                                                 solo una vez? o el
>                                                 mismo llamado?. Aclaro
>                                                 que el
>                                                 > popup se carga de
>                                                 información de las dos
>                                                 fuentes json por eso
>                                                 esta uno
>                                                 > dentro del otro.
>                                                 Espero puedan darme
>                                                 una mano!!!
>                                                 >
>                                                 >
>                                                 >  $.getJSON("carga
>                                                 datos", function
>                                                 (data) {
>                                                 >           for (var i
>                                                 = 0; i < data.length;
>                                                 i++) {
>                                                 >             var
>                                                 nombre =
>                                                 data[i].nombre;
>                                                 >             var dir
>                                                 = data[i].direccion;
>                                                 >
>                                                 $.getJSON("cargar
>                                                 otros datos",
>                                                 function(data) {
>                                                 > var var1= data.var1;
>                                                 > var var2= data.var2;
>                                                 > //crear popup
>                                                 > });
>                                                 >             //crear
>                                                 marcador
>                                                 >
>                                                   //agregar marcador a
>                                                 la capa
>                                                 >           } // fin
>                                                 del for
>                                                 >
>                                                   }).complete(function() {
>                                                 > //agregar capa al
>                                                 mapa
>                                                 > });
>                                                 >
>                                                 
>                                                 >
>                                                 _______________________________________________
>                                                 > Php-avanzado mailing
>                                                 list
>                                                 >
>                                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                                 >
>                                                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                                 
>                                                 --
>                                                 Leonardo Tadei
>                                                 leonardot en pegasusnet.com.ar
>                                                 Web:
>                                                 http://leonardo.tadei.com.ar
>                                                 Firma pública:
>                                                 http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>                                                 
>                                                 _______________________________________________
>                                                 Php-avanzado mailing
>                                                 list
>                                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                                 
>                                         
>                                         
>                                 
>                                 
>                                 
>                                 _______________________________________________
>                                 Php-avanzado mailing list
>                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                         
>                         
>                         
>                         
>                         -- 
>                         Matias Fernando Gea
>                         matigea en gmail.com
>                         http://www.mfgea.com.ar
>                         
>                         _______________________________________________
>                         Php-avanzado mailing list
>                         Php-avanzado en pato2.fi.mdp.edu.ar
>                         http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                 
>                 
>         
>         
> 
> 
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado

-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado