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 :

Pourquoi je dois confirmer deux fois pour lancer un enregistrement


Sujet :

jQuery

  1. #1
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut Pourquoi je dois confirmer deux fois pour lancer un enregistrement
    Merci de votre aide.
    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
    $('#enregistreritineraire').click(function () {				  
     
    if (confirm("Voulez vous resaisir l itineraire")) {document.location.href = "CoorAdresse.php"}
    		else {
     
    		$.post('EnregistrerItineraire.php', {
    		depart: villedepart,
    		arrive: villearrive
     
    						  					},  
    		function(data){
     
    			if(data == "Success") {
    			// Le membre est connecté. Ajoutons lui un message dans la page HTML.
    			$("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
    			setTimeout(function() {$('#resultat').fadeOut();document.location.href = 'indexdate.php'}, 3000);
    //						            setTimeout(function(){ document.location.href = 'indexdate.php'; }, 2000);
     
     
    								   }
     
     
    			else  {		
    			$("#resultat").html("<p>Erreur lors de la connexion...</p>");
    				   }
    				},
    			'text'
    			);
     
    		nbrevent = 0; calcroute = false;
    		}
    Je dois confirmer deux fois pour lancer l'appel $.post.
    je ne vois pas où se situe le problème.

  2. #2
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Il doit avoir une histoire de callback, mais je ne sais pas comment m'y prendre.

  3. #3
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 314
    Points : 453
    Points
    453
    Par défaut
    essayez comme ça:
    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
    $('#enregistreritineraire').click(function () {				  
     
    if (confirm("Voulez vous resaisir l itineraire")) {document.location.href = "CoorAdresse.php"}
    		else {
     
     $.ajax({
      type: "POST",
      url: "EnregistrerItineraire.php",
      data: {
    	depart: villedepart,
      arrive: villearrive},
      dataType: "text"
    })
    .done(function() {			
    $("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
    			setTimeout(function() {$('#resultat').fadeOut();document.location.href = 'indexdate.php'}, 3000); })
     
    .fail(function() {$("#resultat").html("<p>Erreur lors de la connexion...</p>");});
     
     
    		}
    }

  4. #4
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Merci.
    Mais c'est pareil il faut cliquer sur confirm deux fois et je ne sais toujour pas oû placer le callback.

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    Bonjour,

    Le problème n'a aucun rapport avec le callback, si vous devez cliquez 2 fois sur la fenêtre de confirmation ceci dit que l'écouteur de l'événement clic se déclenche 2 fois, probablement parce que ce code existe déjà quelque part dans les scripts chargés....

    Déjà votre code manque d'une accolade et parenthèse fermantes à la fin, mais je ne pense pas que ça a un rapport avec le problème ...

    Montrez nous un peu plus de code (surtout le code html et js) pour mieux voir ce qui se passe...

  6. #6
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Merci, voici un bout de code.
    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
    $.post('EnregistrerItineraire.php', 
    		{
    		depart: villedepart,
    		arrive: villearrive
    		},  
    		traitement_callback("hello world"), //fonction de retour
    	    'text' // Format des données retournées par le serveur
    		);
     
     
     
    		}
    		}
    		})
     
    		function traitement_callback(in_text){
    			   alert(in_text);
    			}
    Voici l'execution du code:
    ville depart ==> ville arrive

    je click Paris ==> Paris
    il affiche rien.

    apres avoir effacer les données précédente
    Je click Paris ==> Banlieu
    il affiche Paris ==> Paris

    apres avoir effacer les données précédente
    Je click Paris ==> Paris
    il affiche Paris => Banlieu

    Bref il y a toujour un train de retard.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    $('#enregistreritineraire').click(function () {				  
     
    		if (nbrevent == 2 && calcroute == true) 
    		{
     
    		departMarkerlatlng = new google.maps.LatLng(markersArray[0].getPosition());
    		arriveMarkerlatlng = new google.maps.LatLng(markersArray[1].getPosition());
     
    		geocoder = new google.maps.Geocoder();
    		geocoder.geocode({'latLng': departMarkerlatlng}, function(results, status) {
    		/* Si le géocodage inversé a réussi */
    		if (status == google.maps.GeocoderStatus.OK) {
    		if (results[2]) {
     
    		var elt = results[0].address_components;
     
    		villedepart = elt[2].long_name;
    		console.log("ville de depart "+villedepart);
    						}
    													 } 
    																					}
    						)
     
     
    		geocoder = new google.maps.Geocoder();
    		geocoder.geocode({'latLng': arriveMarkerlatlng}, function(results, status) {
    		/* Si le géocodage inversé a réussi */
    		if (status == google.maps.GeocoderStatus.OK) {
    		if (results[2]) {
     
    		var elt = results[0].address_components;
     
    		villearrive = elt[2].long_name;
    		console.log("ville d arrive "+villearrive);
     
    						}
    													 } 
    																					}
    						)
     
     
    		if (confirm("Voulez vous resaisir l itineraire")) {document.location.href = "CoorAdresse.php"}
    		else {
     
    		$.post('EnregistrerItineraire.php', {
    		depart: villedepart,
    		arrive: villearrive
     
    						  					},  
    		function(data){
     
    			if(data == "Success") {
    			traitement_callback("hello world"), //fonction de retour
    			// Le membre est connecté. Ajoutons lui un message dans la page HTML.
    			$("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
    // 			setTimeout(function() {$('#resultat').fadeOut();document.location.href = 'indexdate.php'}, 3000);
    //						            setTimeout(function(){ document.location.href = 'indexdate.php'; }, 2000);
     
     
    								   }
     
     
    			else  {		
    			$("#resultat").html("<p>Erreur lors de la connexion...</p>");
    				   }
    				},
    			'text'
    			);
     
    		nbrevent = 0; calcroute = false;
    		}
     
    		}
    		})
     
    		function traitement_callback(in_text){
    			   alert(in_text);
    			}
    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
    function effacerItineraire() {
    		for (var i = 0; i < directionsDisplayArray.length; i++ ) {
    				directionsDisplayArray[i].setMap(null);
    				directionsDisplayArray[i].setPanel(null);
     
    				}
    		for (var i = 0; i < markersArray.length; i++ ) {
    				markersArray[i].setMap(null);
     
    				}
     
    		directionsDisplayArray = [];
    		markersArray = [];
    		directionsDisplayArray.length = 0;
    		markersArray.length = 0;
    		nbrevent = 0;
    		calcroute = false;
    		alert("fin effacerItineraire");}

  7. #7
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Je reprend le code que l'on m a donner avec un peu de modification
    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
    32
    33
    if (confirm("Voulez vous resaisir l itineraire")) {document.location.href = "CoorAdresse.php"}
    		else {
     
     
    			$.ajax({
    				  type: "POST",
    				  url: "EnregistrerItineraire.php",
    				  data: {
    					depart: villedepart,
    				  	arrive: villearrive
    				  		},
    				  	dataType: "text"
    				  })
     
    				.done(function() {			
    				$("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
        		    $('#resultat').fadeOut(2000,traitement_callback("hello world"));})
     
    				.fail(function() {$("#resultat").html("<p>Erreur lors de la connexion...</p>");});
     
     
    						}
     
     
     
    		nbrevent = 0; calcroute = false;
     
    		}
    		})
     
    		function traitement_callback(in_text){
    			   alert(in_text);
    			}
    Il y a toujours un train de retard dans l'enregistrement des villes de départ et arrivée.
    Merci pour vos efforts.

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    Bonjour,

    D'après ce que je vois, la fonction callback de geocoder.geocode est une fonction asynchrone, c'est à dire qu'elle prend un peu plus de temps pour récupérer le résultat depuis l'api, et javascript n'attendra pas la fin et continue à exécuter le code js, et donc les valeurs de villedepart et villearrive est undefined.


    Vous devriez mettre le code de confirmation et $.post à l'intérieur de cette fonction et pas à l'extérieur.

    Pour mieux vous expliquer ceci, voici ce qui se passe avec votre code :

    1-Vous cliquez sur le bouton enregistreritineraire, les fonctions geocoder s'exécutent.

    2-JS n'attend pas le retour de ces fonctions, et donc il continue l'exécution du code et la fenêtre de confirmation s'affiche.

    3-Vous cliquez sur Annuler, puis l'appel $.post est effectuée avec les valeurs undefined des variables villedepart et villearrive

  9. #9
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Maintenant un click suffit pour valider le trajet.
    Il y a réussite en console et l'INSERT fonctionne.
    Le problème est le même il y a toujour un retard entre l'établissement des villes de depart et arrivé .
    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
    if (confirm("Voulez vous resaisir l itineraire")) {document.location.href = "CoorAdresse.php"}
    		else {
     
     
    			$.ajax({
    				  type: "POST",
    				  url: "EnregistrerItineraire.php",
    				  cache : false,
    				  data: {
    					depart: villedepart,
    				  	arrive: villearrive
    				  		},
    				  dataType: "text",
    				    "success": function (data, textStatus, jqXHR) {
    				        console.log("L'appel Ajax est une réussite.");
    				        $("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
    		     		    $('#resultat').fadeOut(2000,traitement_callback("hello world"));
    				    },
    				    "error": function (jqXHR, textStatus, errorThrown) {
    				        console.log("L'appel Ajax est un échec.");
    				        $("#resultat").html("<p>Erreur lors de la connexion...</p>");
    				    }
    				});
     
    		    }
     
    function traitement_callback(in_text){
    			   alert(in_text);
    			}
    Le fichier EnregistrerItineraire.php
    Code php : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
     
    if (isset($_POST['depart'], $_POST['arrive']))
    {
    $depart = htmlentities($_POST['depart']);
    $arrive = htmlentities($_POST['arrive']);
     
    try {
     
     
        $PDO = new PDO('mysql:host=localhost;dbname=philippe','root','');
        $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
        $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
     
        $sql = "INSERT INTO trajet (depart, arrive) VALUES (:depart,:arrive)";
     
        $req = $PDO->prepare($sql);
     
        $PDO->query('SET foreign_key_checks = 0');
        //do some stuff here
     
     
        $req->execute(array(
     
    //         "idtrajet" =>NULL,
     
            "depart" => $depart,
     
            "arrive" => $arrive
     
    //         "idmembre" => NULL
     
        ));
        $PDO->query('SET foreign_key_checks = 1');
    //     var_dump($req);
    }
    catch(Exception $e)
     
    {
        echo '.$e->getMessage().';
    //         die('Erreur : '.$e->getMessage());
     
    }
    echo 'Success';
    // echo 'Echec';
    }

  10. #10
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Merci Toufik83.
    Le "confirm" est bien à l'interieure du geocoder.
    De plus j'ai declarer en globale les variables
    var villedepart;
    var villearrive;
    En console.log il y a bien les villes de départ et arrive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    L'appel Ajax est une r�ussite.
     
    ville d arrive Paris
     
    ville de depart Paris
    Par contrel l ' INSERT' avec EnregistrerItineraire.php a toujour un trajet de retard.

    Pourquoi je ne le sais pas.

  11. #11
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    D'accord, maintenant puisque le retour d'ajax est OK mais pas d'insertion, ceci dit qu'il y'a une erreur PDO et pour l'identifier il est toujours possible d'utiliser des (try catch) pour chaque code susceptible.

    D'abord vous devriez activer l'affichage des erreurs en ajoutant ces lignes toute au début du script php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
    Puis vous mettez le code d'insertion dans un bloc try catch comme ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    try{
      $req = $PDO->prepare($sql);
      $PDO->query('SET foreign_key_checks = 0');
      $req->execute(array( 
            ":depart" => $depart,
     
            ":arrive" => $arrive
        ));
        $PDO->query('SET foreign_key_checks = 1');
    }
    catch(PDOException $e){//Notez PDOException et pas seulement Exception
          die("Erreur d'insertion :".$e->getMessage());
    }

  12. #12
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Voici le code d'enregistrement suivant vos consignes.
    Code php : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
    if (isset($_POST['depart'], $_POST['arrive']))
    {
    $depart = htmlentities($_POST['depart']);
    $arrive = htmlentities($_POST['arrive']);
     
     
     
     
        $PDO = new PDO('mysql:host=localhost;dbname=philippe','root','');
        $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
        $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
     
        $sql = "INSERT INTO trajet (depart, arrive) VALUES (:depart,:arrive)";
     
        try {
     
        $req = $PDO->prepare($sql);
     
        $PDO->query('SET foreign_key_checks = 0');
        //do some stuff here
     
     
        $req->execute(array(
     
     
            "depart" => $depart,
     
            "arrive" => $arrive
     
     
        ));
        $PDO->query('SET foreign_key_checks = 1');
    }
    catch(PDOException $e){//Notez PDOException et pas seulement Exception
        die("Erreur d'insertion :".$e->getMessage());
    }
    }

    L' INSERT s'effectue avec un métro de retard.

  13. #13
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    Quand vous dites "retard" j'en déduis tout de suite que c'est un problème de synchronisation.

    Avez-vous mis le code de l'appel ajax à l'intérieur de la fonction de rappel de geocoder.geocode ? êtes-vous sûr ? si oui comment vous avez fait pour récupérer les valeurs de villedepart et villearrive ?

  14. #14
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Le click sur enregistreritineraire englobe le geogoder.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    $('#enregistreritineraire').click(function () {				  
     
    		if (nbrevent == 2 && calcroute == true) 
    		{
     
    // debut du geocoder
     
    		departMarkerlatlng = new google.maps.LatLng(markersArray[0].getPosition());
    		arriveMarkerlatlng = new google.maps.LatLng(markersArray[1].getPosition());
     
    		geocoder = new google.maps.Geocoder();
    		geocoder.geocode({'latLng': departMarkerlatlng}, function(results, status) {
    		/* Si le géocodage inversé a réussi */
    		if (status == google.maps.GeocoderStatus.OK) {
    		if (results[2]) {
     
    		var elt = results[0].address_components;
     
    		villedepart = elt[2].long_name;        // ville de depart est ici récupéré
    		console.log("ville de depart "+villedepart);
    						}
    													 } 
    																					}
    						)
     
     
    		geocoder = new google.maps.Geocoder();
    		geocoder.geocode({'latLng': arriveMarkerlatlng}, function(results, status) {
    		/* Si le géocodage inversé a réussi */
    		if (status == google.maps.GeocoderStatus.OK) {
    		if (results[2]) {
     
    		var elt = results[0].address_components;
     
    		villearrive = elt[2].long_name;          // ville d'arrivée est récupérer ici
    		console.log("ville d arrive "+villearrive);
     
    						}
    													 } 
    																					}
    						)
     
     
    		if (confirm("Voulez vous resaisir l itineraire")) {document.location.href = "CoorAdresse.php"}
    		else {
     
     
    			$.ajax({
    				  type: "POST",
    				  url: "EnregistrerItineraire.php",
    				  cache : false,
    				  data: {
    					depart: villedepart,   // ici villedepart
    				  	arrive: villearrive      // et villearrive sont passées en arguments de l'appel AJAX
    				  		},
    				  dataType: "text",
    				    "success": function (data, textStatus, jqXHR) {
    				        console.log("L'appel Ajax est une réussite.");
    				        $("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
    		     		    $('#resultat').fadeOut(2000,traitement_callback("hello world"));
    				    },
    				    "error": function (jqXHR, textStatus, errorThrown) {
    				        console.log("L'appel Ajax est un échec.");
    				        $("#resultat").html("<p>Erreur lors de la connexion...</p>");
    				    }
    				});
     
    		    }
     
    		nbrevent = 0; calcroute = false;
     
    		}
    		})
     
    		function traitement_callback(in_text){
    			   alert(in_text);
    			}
    Merci sincèrement pour votre aide.

  15. #15
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    Apparemment vous n'avez pas compris ce que j'ai dit.

    Au lieu d'envoyer deux requêtes geocoder, pourquoi ne pas construire un tableau d'objet comme suite LatLng=[departMarkerlatlng ,arriveMarkerlatlng ]; et le passer en paramètre à la fonction geocoder ?
    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
     
    geocoder = new google.maps.Geocoder();
    geocoder.geocode(LatLng, function(results, status) {
        /* Si le géocodage inversé a réussi */
        if (status == google.maps.GeocoderStatus.OK) {
           console.log("Status Ok :"+results);//quel est le retour de cette ligne dans la console?
     
           /* Si tout se passe bien, normalement vous recevez un tableau d'objets contenant les informations des deux villes
          , celles du départ et d'arrivée. vous pouvez donc récupérer les valeurs séparément puis les utiliser ensuite avec $.ajax ou $.post 
          */
     
         //L'appel ajax doit être ici et pas ailleurs
          $.ajax(....);
        } 
    });

  16. #16
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Voici une ébauche.
    La fonction geogoder.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    function geogodage(latLngArray, count) {
     
    		geocoder = new google.maps.Geocoder();
    		geocoder.geocode({latLngArray, function(results, status) {
    		/* Si le géocodage inversé a réussi */
    		if (status == google.maps.GeocoderStatus.OK) {
    		if (results[2]) {
     
    		var elt = results[0].address_components;
    		if (count == 0) {
    		villedepart = elt[2].long_name;
    		console.log("ville de depart "+villedepart);
    		count = count + 1;
    						}
    		else if (count == 1)  {
    		villearrive = elt[2].long_name;
    		console.log("ville d arrive "+villearrive);
    		count = 0;
    							  } 
    						 }
    													}
    																		 }
    		})
     
    if (confirm("Voulez vous resaisir l itineraire")) {document.location.href = "CoorAdresse.php"}
    		else {
     
     
    			$.ajax({
    				  type: "POST",
    				  url: "EnregistrerItineraire.php",
    				  cache : false,
    				  data: {
    					depart: villedepart,
    				  	arrive: villearrive
    				  		},
    				  dataType: "text",
    				    "success": function (data, textStatus, jqXHR) {
    				        console.log("L'appel Ajax est une réussite.");
    				        $("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
    		     		    $('#resultat').fadeOut(2000,traitement_callback("hello world"));
    				    },
    				    "error": function (jqXHR, textStatus, errorThrown) {
    				        console.log("L'appel Ajax est un échec.");
    				        $("#resultat").html("<p>Erreur lors de la connexion...</p>");
    				    }
    				});
     
    		    }
    		}
    Et l'appel de la fonction ci desus.

    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
     
    $('#enregistreritineraire').click(function () {				  
     
    		if (nbrevent == 2 && calcroute == true) 
    		{
     
    		departMarkerlatlng = new google.maps.LatLng(markersArray[0].getPosition());
    		arriveMarkerlatlng = new google.maps.LatLng(markersArray[1].getPosition());
    		console.log("AVANT latLngArray OK");
    		latLngArray = [departMarkerlatlng , arriveMarkerlatlng ];
    		console.log("latLngArray OK");
    		count = 0;
     
    		geogodage(latLngArray[departMarkerlatlng,arriveMarkerlatlng], count);
     
     
    		nbrevent = 0; calcroute = false;
     
    		}
    		})
    Ca semble juste mais l'INSERT devient Inexcutable. ???

  17. #17
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    Non, tu n'as toujours pas mis le code d'ajax à l'intérieur de la fonction de rappel, modifies la fonction comme ceci :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    function geogodage(latLngArray, count) {
      if (confirm("Voulez vous resaisir l itineraire")) {
        document.location.href = "CoorAdresse.php"
      } 
      else {
    	geocoder = new google.maps.Geocoder();
    	geocoder.geocode({'latLng': latLngArray},
    		function(results, status) {
    			/* Si le géocodage inversé a réussi */
    			if (status == google.maps.GeocoderStatus.OK) {
    				if (results[2]) {
                                            var elt = results[0].address_components;
    					/*if (count == 0) {
    						villedepart = elt[2].long_name;
    						console.log("ville de depart " + villedepart);
    						count = count + 1;
    					} else if (count == 1) {
    						villearrive = elt[2].long_name;
    						console.log("ville d arrive " + villearrive);
    						count = 0;
    					}*/
    				  }
    				  if(villedepart&&villearrive){
    					$.ajax({
    						type: "POST",
    						url: "EnregistrerItineraire.php",
    						cache: false,
    						data: {
    							depart: villedepart,
    							arrive: villearrive
    						},
    						dataType: "text",
    						"success": function(data, textStatus, jqXHR) {
    							console.log("L'appel Ajax est une réussite.");
    							$("#resultat").html("<p>L ajout a ete effectuer avec succes ! </p><br><p>Vous allez etre rediriger sur la liste des activite");
    							$('#resultat').fadeOut(2000, traitement_callback("hello world"));
    						},
    						"error": function(jqXHR, textStatus, errorThrown) {
    							console.log("L'appel Ajax est un échec.");
    							$("#resultat").html("<p>Erreur lors de la connexion...</p>");
    						}
    					});
    				  }
    			 }
    		});
      }
    }
    Que donne le console.log ?

    Normalement vous devriez voir un message dans la console montrant l'objet reçu par l'api, copier le et coller le ici.

  18. #18
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Apres essai il n'y a pas d'execution de la function géocodage en tenant compte que l'on commente le code comme vous le précisez sans count.

    Je crois que l'on ne peut passer passer un tableau à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    geocoder = new google.maps.Geocoder();
    	geocoder.geocode({
    		'latLng': latLngArray,  //  ICI on ne peut pas passer un tableau.
    		function(results, status) {
    			/* Si le géocodage inversé a réussi */
    			if (status == google.maps.GeocoderStatus.OK) {
    				console.log("results is :",results);  // ICI ne parait même pas. Le geocoder ne fonctionne même pas
    				if (results[2]) {
                                            var elt = results[0].address_components;
    voila le message de la console.
    CoorAdresse2.php:1 Uncaught (in promise)
    _.qe {message: 'unknown property function', stack: 'Error\n at _.qe.captureStackTrace (https://maps.…zE_0wkG8&libraries=geometry&sensor=false:302:2188', name: 'InvalidValueError'}
    message
    :
    "unknown property function"
    name
    :
    "InvalidValueError"
    stack
    :
    "Error\n at _.qe.captureStackTrace (https://maps.googleapis.com/maps/api/js?key=MA_CLE_GOOGLE&libraries=geometry&sensor=false:271:1828)\n at new _.qe (https://maps.googleapis.com/maps/api/js?key=MA_CLE_GOOGLE&libraries=geometry&sensor=false:88:152)\n at _.re (https://maps.googleapis.com/maps/api/js?key=MA_CLE_GOOGLE&libraries=geometry&sensor=false:88:270)\n at https://maps.googleapis.com/maps/api/js?key=MA_CLE_GOOGLE&libraries=geometry&sensor=false:89:154\n at https://maps.googleapis.com/maps/api/js?key=MA_CLE_GOOGLE&libraries=geometry&sensor=false:91:368\n at Cya (https://maps.googleapis.com/maps-api-v3/api/js/50/4/intl/fr_ALL/geocoder.js:2:168)\n at https://maps.googleapis.com/maps-api-v3/api/js/50/4/intl/fr_ALL/geocoder.js:7:831\n at new Promise (<anonymous>)\n at Jya.geocode (https://maps.googleapis.com/maps-api-v3/api/js/50/4/intl/fr_ALL/geocoder.js:7:795)\n at https://maps.googleapis.com/maps/api/js?key=MA_CLE_GOOGLE&libraries=geometry&sensor=false:302:2188"
    [[Prototype]]
    :
    Error

  19. #19
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    Bon, j'ai tout essayé pour faire fonctionner un teste en locale mais je reçois toujours l'erreur "you must enable Billing on google cloud", j'ai cherché de quoi s'agit-il et j'ai trouvé qu'il faut créer un compte de facturation avec un numéro de carte valide, chose que je n'ai pas.

    La dérnière solution est d'utiliser des callback imbriqués :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //récupérer les infos de la ville de départ
    geocoder.geocode(LatLngVilleDepart, function(results, status) {
         var elt = results[0].address_components;
         villedepart = elt[2].long_name;
         //ici lance un autre geocoder pour récupérer les infos de la ville d'arrivée
        geocoder.geocode(LatLngVilleArrive, function(results1, status) {
             elt = results1[0].address_components;
             villearrive = elt[2].long_name;
             //lancer $.ajax avec les valeurs des deux villes
             $.ajax(....); 
        });
    });
    Bref, si vous avez confiance en moi, vous pouvez me donner votre clé google pour tester en locale ?

  20. #20
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 939
    Points : 44 109
    Points
    44 109
    Par défaut
    Bonjour,
    Citation Envoyé par Toufik83
    Bref, si vous avez confiance en moi, vous pouvez me donner votre clé google pour tester en locale ?
    tu peux utiliser celle visible dans le message d'erreur

    Concernant la discussion je dois admettre que j'ai du mal à visualiser la logique/ergonomie de la page .

    On peut effectivement faire des appels successifs en utilisant une fonction englobante qui prend en paramètre un tableau de données et en gérant les retours de l'API pour supprimer l'élément traité et relancer la fonction tant qu'il y a des éléments dans le tableau.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. l'even CheckedChanged se lance deux fois pour un radiobouton
    Par aiglelibre dans le forum Développement Windows
    Réponses: 2
    Dernier message: 08/06/2013, 00h58
  2. cliquer deux fois pour ouvrir dans un nouvel onglet
    Par rosert dans le forum ASP.NET
    Réponses: 0
    Dernier message: 07/12/2012, 16h57
  3. Réponses: 6
    Dernier message: 14/04/2009, 10h14
  4. Réponses: 4
    Dernier message: 29/01/2008, 15h08

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