IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

AJAX en JQuery et retour javascript pour Google Map


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 17
    Points
    17
    Par défaut AJAX en JQuery et retour javascript pour Google Map
    Bonjour,

    Je dois mettre en place une fonction AJAX qui affiche des markers Google Map dont les infos et coordonnées sont présents dans une base de données. Cette fonction prendra 2 paramètres qu'elle passera en GET vers un fichier PHP (data.php) de traitement. Ces paramètres étant les coordonnées nord-est et sud-ouest de google map, le data.php va préparer une requête pour prendre les points situé entre ses coordonnées et doit les afficher.

    La requête fonctionne, mais le problème est que je crois qu'il n'est pas possible de retourner du javascript de cette façon, pourtant, j'en ai besoin, car la méthode pour afficher les markers GM est une fonction javascript...

    La solution, je crois, serait de traiter le résultat de ma requête de data.php dans ma fonction js qui l'appelle.

    Voilà ma fonction js :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function dragcarte(nordest,sudouest){
    	var nordest;
    	var sudouest;
    	$.ajax({
    		type: "GET",
    		url: "data.php",
    		data: "ne="+nordest+"&so="+sudouest,
    		dataType: "script",
    		success: function(msg){
    			$("#ajax").html( msg );
    		}
    });
    }
    Je pense qu'il faudrait que je modifie au niveau du success et que je mette quelque chose du genre (mais ça ne doit pas fonctionner comme ça) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    success: function(msg){
    	eval( msg );
    }
    Voici en gros mon data.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?
    	if($_GET['ne'] != "" && $_GET['so'] != ""){
     
    		//on récupère 2 valeurs, le point sud ouest et le point nord est, il faut spliter les valeurs pour en obtenir 4, chaque latitude et chaque longitude.
     
    		// Requête qui va chercher les évenements éventuels présents entre les coordonnées Nord-Est, Sud-Ouest données par les variables $nordest et $sudouest.
     
    		// Si il y a un résultat, on affiche ce qu'il faut.
    ?>
    		function affiche_points_ajax(){
    <?
    		while($resajax = mysql_fetch_array($sql_markers)){
    ?>
    			var point=new GLatLng(<?=$resajax["Latitude"]?>,<?=$resajax["Longitude"]?>);
    <?
    			if($resajax["Commercial"]){
    ?>
    				markers_c[markers_c.length] = PlacePointAvecInfos(map, point, 5,"icone_commercial.gif","<?=utf8_encode($resajax["CouleurCategorie"])?>","http://www.closevents.com/detail_evenement.php?id_evenement=<?=$resajax["IdEvenement"]?>&id_langue=<?=$resajax["IdLangue"]?>",2,"<? echo addslashes($ls_contenuPetiteBulle) ; ?>", "infoPetiteBulle");
    <?
    			}else{
    ?>
    				markers[markers.length] = PlacePointAvecInfos(map, point, 5,"<?=$resajax["IconeCategorie"]?>","<?=utf8_encode($resajax["CouleurCategorie"])?>","http://www.closevents.com/detail_evenement.php?id_evenement=<?=$resajax["IdEvenement"]?>&id_langue=<?=$resajax["IdLangue"]?>",1,"<? echo addslashes($ls_contenuPetiteBulle) ; ?>", "infoPetiteBulle");
    <?
    			}
    		}
    ?>
    		}affiche_points_ajax();
    		alert("test");
    <?
    	}
    ?>
    J'espère qu'il y a toutes les données du problème et que vous pourrez m'aider parce que là, je galère, j'ai cherché un peu partout, et le JS, j'aime pas trop ça .

    Merci.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 205
    Points : 285
    Points
    285
    Par défaut Google map
    Je ne suis pas certain de bien comprendre ta demande.

    Tu cherches à représenter des éléments sur google map. Pour cela il y a l'api fourni par google map. As tu essayé de l'utiliser ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    En fait, j'ai une base de données qui contient énormément de coordonnées de marqueurs Google Map et vu qu'il serait bien trop long de les charger tous au début (parce qu'il y en a vraiment énormément), l'idée serait de charger seulement les marqueurs visibles dans le cadre de la map. Et ce via Ajax (pour ne pas recharger la page).

    La fonction se chargerait à chaque drag de la map (donc on récupère à chaque fois les coordonnées Nord-Est et Sud-Ouest de la map en cours et on affiche les marqueurs présents et seulement ceux-là).

    Enfin après, ça c'est l'objectif, disons que le problème réside surtout dans le fait de devoir récupérer et exécuter une fonction JS ( affiche_point_ajax(); ) présente dans le fichier de traitement php (data.php) appelé par la fonction AJAX ( dragcarte(); ).

    Parce que la fonction se créer via la requête et le résultat est envoyé vers une DIV avec l'ID : #ajax. Sauf que le JS s'affiche dans la DIV mais ne s'exécute pas.

    J'espère avoir été clair =x.

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Si tu veux renvoyer du code javascript qui sera exécuté par
    JQuery sans spécifier que tu attends du javascript,
    il faut deux choses

    1) Que le code que tu renvoies soit entouré de balises script, par ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type='text/javascript'>
      alert('ça marche');
    </script>
    2) que les données retournées soient insérées dans le DOM, car c'est
    à cet instant que JQuery va évaluer le javascript. Pour cela ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("#ajax").html( msg );
    fait très bien l'affaire.

    Une autre approche est de renvoyer uniquement des données
    pour construire ensuite les marqueurs en javascript, par exemple
    en utilisant JSON

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [
    { lat: 000, long: 000, text: 'texte du marqueur' },
    { lat: 000, long: 000, text: 'texte du marqueur' },
    ...
    ]
    Dans ce cas là, tu renvoie un en-tête json depuis php et tu dis
    à JQuery que tu attends du Json, ta fonction success ressemblera
    à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    success: function(data){
      for(var i=0;i<data.length;i++) ajoutMarqueur( data.lat, data.long, data.text );
    }
    Un exemple de ce genre de dialogue
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Merci Marcha =).

    En gros, la seule chose qui fait que ça ne marche pas, ça serait l'absence des balises script ? Pourtant, je crois que j'avais testé mais que ça n'avait rien donné =/. Le alert("test"); passait pas... Bah je retenterais ça demain et je tiendrais au courant, j'avais peut-être fait une erreur quelque part.

    Sinon, j'avais pensé à mettre l'ID sur une balise script au lieu d'une DIV, mais ça ne semblait pas marcher non plus =/.

    Pour le Json, j'avais vu ça lors de mes recherches mais je n'ai pas tout compris... Cependant, ça a l'air intéressant. J'ai mit ton lien d'exemple de côté, ça peut toujours servir =).

    Sinon, oui, tu dois parler du dataType = script ? Je me demandais s'il fallait que je le mette, est-ce qu'il est utile de le faire ou non ?

    Enfin, pour revenir à l'utilité global de ce que je dois faire, je me suis demandé si c'était vraiment possible de gérer l'apparition de marqueurs Google Map en AJAX... J'imagine que oui, vu que j'ai vu des exemples pour afficher / cacher des marqueurs d'un certain type. Si quelqu'un pouvait me le confirmer au passage ^^.

    Merci encore et bonne soirée.

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par Lianodel Voir le message
    Sinon, oui, tu dois parler du dataType = script ? Je me demandais s'il fallait que je le mette, est-ce qu'il est utile de le faire ou non ?
    Sauf erreur c'est utile uniquement si tu souhaite renvoyer uniquement du
    javascript sans faire d'insertion dans le dom.

    Tu peux très bien t'en sortir sans préciser le dataType en renvoyant des
    balises script et en insérant le retour dans le DOM (mais si tu ne fais que
    retourner du javascript, je pense que c'est plus propre d'utiliser le dataType
    et de fixer le content-type approprié coté php, dans ce cas je suppose (jamais
    testé) que tu ne dois retourner que le code javascript (sans les balises)

    Citation Envoyé par Lianodel Voir le message
    Enfin, pour revenir à l'utilité global de ce que je dois faire, je me suis demandé si c'était vraiment possible de gérer l'apparition de marqueurs Google Map en AJAX...
    Oui c'est possible et ton approche du problème me semble tout à fait bonne.
    Une fois que tu aura une solution fonctionnelle je te suggère de tester en
    élargissant la zone dans laquelle tu prépare les marqueur en prenant une
    marge autour de la zone visible de la map afin de charger les marqueurs
    avoisinant, cela permettra peut-être de donner l'impression d'un meilleur
    temps de réponse quand l'utilisateur glisse la map (les marqueurs étant
    déjà chargés)
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Voilà, ça fonctionne ! En fait j'avais oublié la déclaration d'une variable lors de mon test...

    Pour ta suggestion, c'est une bonne idée, je n'y avais pas pensé.

    En tout cas merci bien, le problème est résolu =).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. De l'ajax dans du javascript (API Google Map)
    Par squal31 dans le forum jQuery
    Réponses: 1
    Dernier message: 26/08/2014, 22h33
  2. Réponses: 1
    Dernier message: 11/11/2009, 09h46
  3. Code pour Google Map
    Par BFH dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/09/2007, 09h56
  4. Insérer une image dans une infobulle pour google maps
    Par durthu dans le forum APIs Google
    Réponses: 2
    Dernier message: 13/07/2007, 12h31
  5. [Google Maps] JavaScript et Google Maps
    Par flyoman dans le forum APIs Google
    Réponses: 1
    Dernier message: 10/07/2007, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo