Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Utilizzo di una variabile contenete l'intero codice di una funzione javascript.

    Salve a tutti,
    sto realizzando una pagina web che utilizza una mappa gmaps che, in teoria, potrebbe contenere migliaia di marker, pertanto per evitare l'inconveniente di avere un codice lunghissimo (una trentina di righe per ogni marker) ho fatto in modo che i marker stampati sulla mappa siano solo quelli che si trovano ad una determinata distanza dal centro della mappa grazie al codice creato con l'ausilio del php.
    Per fare in modo che l'utente, comunque, possa vedere anche i markers fuori dallo spazio stabilito in origine, basta cliccare in un punto qualsiasi della mappa e la stessa si riposiziona con il centro sul punto cliccato. A questo punto dovrebbe stampare sulla mappa i nuovi markers; la seguente funzione:
    codice:
    ...
    ...
     $.post("centra.php", {lat:latitudine, lng:longitudine}, function(data){  
      addMarker(data);
     }, "json"); 
    
    
    ....
    ....
    invia ad una pagina php le nuove coordinate che genera una variabile che contiene l'intero codice per la stampa dei nuovi markers (il codice lo vedo grazie ad un alert, ed è corretto).

    Problema:
    questo codice, contenuto nella variabile (data) deve essere inserito in una funzione

    codice:
    function addMarker(a){
    ????
    }
    ed eseguito. Come posso fare (se è possibile farlo)?
    Grazie in anticipo.
    Ultima modifica di giannidef; 23-06-2014 a 21:39

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, prova con la funzione eval()
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Grazie per la risposta! Ho riprovato eval() ma ancora non visualizzo i marker.

  4. #4
    Ho risolto in questo modo (per adesso):
    codice:
    function addMarker2(f){
        var mark = f;
        
        eval("var newmark = mark;");
        $('head').append('<script type="text/javascript">function newMarker(){'+newmark+'}</script>');
    
    
    newMarker();
        }

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Potrebbe andare ma non capisco perché fai tutto quel giro.
    Puoi sovrascrivere la funzione direttamente con eval che userai appena ricevi i dati.

    Esempio:
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <style type="text/css">
          
        </style>
        <script type="text/javascript">
          function addMarker(a){}; // inizializzo la funzione vuota
          addMarker("qualche cosa che non sarà vista"); // se la richiamo ovviamente non avviene niente
          
          // da qualche parte ricevo i dati da utilizzare come script per la funzione
          (function daqualcheparte(data){
            eval("addMarker = function(a){"+data+"}"); // con eval sovrascrivo la funzione e ci butto dentro la stringa script
          })("alert(a)");
          
          addMarker("eventuale argomento che sarà visto"); // ora la funzione funziona con lo script inserito al suo interno
    
        </script>
      </head>
      <body>
      </body>
    </html>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    secondo me hai scelto il metodo paggiore di procedere:

    1) non capisco perche avere tanti marker significhi avere un codice lungo esitono cicli e funzioni parametrizzabili proprio per questo, posso mostrare sulla mappa anche migliaia di marker con dieci righe di codice
    2) se i marker da mostrare sulla mappa sono troppi, puoi raggrupparli in cluster, questo approcio si chiama MarkerClusterer
    3) si può sempre fare a meno di usare la funzione eval se si imposta il codice con criterio, in questo caso invia i dati in qualche formato strutturato, un xml o un json ed elabora questi dati direttamente da js

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Giusto per precisare. Conosco ben poco le API di gmaps, quindi personalmente mi sono limitato a rispondere per ciò che è la richiesta in oggetto ma concordo pienamente con Vindav nell'utilizzare diversi altri metodi con cui risolvere, piuttosto, il problema a monte.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    Il mio problema non era tanto caricare poche icone (markers) sulla mappa ma di avere un codice breve e con una limite dei dati nella "Visualizzazione Sorgente" e ridurre, quindi, la quantità di dati rubati da altri (potrebbero essere presenti nomi, indirizzi, email e numeri di telefoni di altri utenti); in questo modo riduco il problema rendendo la vita difficile a qualcuno (anche se non lo risolvo totalmente). I dati sono presenti in database e potrebbero essere molte migliaia (spero !!).
    Inoltre, all'utente loggato potrebbe interessare interagire solo con gli utenti entro un tot chilometri dalla sua localizzazione, quindi la possibilità di cliccare oltre il raggio (es.:50Km) e vedere altri utenti, è un di più! Il codice per la visualizzazione dei markers, poi, prevede anche l'evento InfoWindows (la finestra visualizza i dati dell'utente oltre ad un link che permette il passaggio ad una scheda più completa), e le icone sono differenti a secondo del tipo di utente. Per questo motivo il codice per ogni marker è molto lungo ed ho scartato l'utilizzo dei cluster (ma forse non li conosco a fondo). Proverò con il consiglio di KillerWorm che mi permette di snellire ulteriormente il codice. Grazie infinite!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.