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 :

Appel ajax dans un if inopérant si suppression d'un alert [AJAX]


Sujet :

jQuery

  1. #1
    Membre du Club
    Homme Profil pro
    autodidacte / éternel débutant
    Inscrit en
    Avril 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : autodidacte / éternel débutant

    Informations forums :
    Inscription : Avril 2018
    Messages : 64
    Points : 43
    Points
    43
    Par défaut Appel ajax dans un if inopérant si suppression d'un alert
    Bonjour à tous,
    J'ai un formulaire HTML que je traite avec un script js contenant (entre autre) un appel ajax vers un fichier php qui alimente une base de donnée SQL
    Je js et l'ajax sont encore un peu mystérieux pour moi. J'avais truffé le js de boites alert pour debugger le script. Maintenant que tout fonctionne je supprime ces alert devenues inutiles.
    Mais la suppression de l'une de ces boites semble empêcher un bout de code de fonctionner : le php appelé par ajax ne s’exécute pas, l'alert de ajax ne s'affiche pas, je n'ai pas de message d'erreur dans la console.
    Le script suivant fonctionne correctement,
    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
    if (confirm(messageConfirm) )   
                {
                $.ajax(
                    {
                    type:'POST',
                    url:'ajout-article.php',
                    data: parametres,
                    datatype: 'text',
                    cache: false,
                    success: function(retourSql) {
                        alert (retourSql);
                        }
                    });
                alert ('Fin du If de confirmation') // la ligne à supprimer
                }
            else
                {
                alert (messageAnnul)    
                }
    Ce code (suppression de la ligne 14) ne fonctionne pas
    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
    if (confirm(messageConfirm) )   
                {
                $.ajax(
                    {
                    type:'POST',
                    url:'ajout-article.php',
                    data: parametres,
                    datatype: 'text',
                    cache: false,
                    success: function(retourSql) {
                        alert (retourSql);
                        }
                    });
                }
            else
                {
                alert (messageAnnul)    
                }
    J'ai pensé à une '{' ou ';' mal placées, ou à un comportement de l'ajax mal compris, mais je n'ai pas trouvé comment faire fonctionner ce tout petit bout de script.
    Mon erreur doit piquer les yeux, mais où est-elle? Comment la corriger?
    Merci de votre aide!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Au lieu d'utiliser des alert() pour déboguer, mets des console.log(...), et regarde dans la console du navigateur (touche "F12" du clavier, puis onglet "Console")

    2- C'est un problème de compréhension du comportement d'ajax.

    Ajax est asynchrone (par défaut).
    • on fait appel à un fichier externe, qui traite les données reçues
    • le résultat met "un certain temps" à revenir au script JS

    • Avec un alert(...),... le temps de LIRE cet alert, le résultat est arrivé.
    • SANS, le résultat n'a pas eu le temps d'arriver... avant la suite du script.


    La solution la plus simple :
    • TOUTE la suite du script doit être écrite/exécutée DANS le success: de la fonction Ajax, pour pouvoir "prendre en compte" le résultat.


    Il existe d'autres moyens (mais sans trop connaitre la suite de ton code, difficile de te conseiller...) :

  3. #3
    Membre du Club
    Homme Profil pro
    autodidacte / éternel débutant
    Inscrit en
    Avril 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : autodidacte / éternel débutant

    Informations forums :
    Inscription : Avril 2018
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Merci,
    J'avais bien vu passer ceci et ça pendant mes recherches...
    Je jette un coup d'oeil à ce que tu me proposes et je reviens.

  4. #4
    Membre du Club
    Homme Profil pro
    autodidacte / éternel débutant
    Inscrit en
    Avril 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : autodidacte / éternel débutant

    Informations forums :
    Inscription : Avril 2018
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Merci pour tes explications limpides. Problème à moitié résolu... ça marche, mais je ne comprend pas pourquoi...
    J'ai opté pour les promesses.
    J'ai commis ceci :
    1-
    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
    var ajaxCall = $.ajax(
                    {
                    type:'POST',
                    url:'ajout-article.php',
                    data: parametres,
                    datatype: 'text',
                    cache: false
                    });
     
    if (confirm(messageConfirm) )   
                {
                ajaxCall.promise()
                    .done(function (retourSql) {alert (retourSql); } )
                    .fail(function () { console.log ("l'appel ajax a échoué"); });
                }
    else
                {
                alert (messageAnnul)    
                }
    L'appel ajax donnait le résultat attendu mais la console m'indiquait que retourSql était undefined (alors que alert (retourSql) m'affichait bien le retour du php attendu. )

    Je suis finalement arrivé à ceci :
    2-
    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
    var ajaxCall = $.ajax(
                    {
                    type:'POST',
                    url:'ajout-article.php',
                    data: parametres,
                    datatype: 'text',
                    cache: false,
                    success: function (retourSql) {
                        alert (retourSql);
                        }
                    });
     
    if (confirm(messageConfirm) )   
                {
                ajaxCall.promise()
                    .done( )
                    .fail(function () { console.log ("l'appel ajax a échoué"); });
                }
    else
                {
                alert (messageAnnul)    
                }
    Tout baigne... donc résolu. Mais j'accepterai toute explication sur l'erreur dans 1-

  5. #5
    Membre du Club
    Homme Profil pro
    autodidacte / éternel débutant
    Inscrit en
    Avril 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : autodidacte / éternel débutant

    Informations forums :
    Inscription : Avril 2018
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Bon, en fait, ce dernier code ne donnait pas le résultat attendu : que le confim soit TRUE ou FALSE, l'appel ajax se lançait.
    Et en plus, j'ai pas vraiment compris comment utiliser les promesses

    Finalement je me suis inspiré de :
    Citation Envoyé par jreaux62 #2
    La solution la plus simple :
    TOUTE la suite du script doit être écrite/exécutée DANS le success: de la fonction Ajax, pour pouvoir "prendre en compte" le résultat.
    En reprenant la suggestion à l'envers, j'ai contourné le problème en remaniant la fonction js : en plaçant l'appel ajax en fin de script, une fois toutes les conditions testées. (du coup, plus de suite de script à ajouter dans le succès)
    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
    ....
       if (!confirm(messageConfirm) )   
            {
            alert (messageAnnul);    
            return;
            }
        else
            {
            $.ajax(
                {
                type:'POST',
                url:'http://localhost/saisie-article/ajout-article.php',
                data: parametres,
                datatype: 'text',
                cache: false,
                success: function (retourSql) {
                    if (retourSql) {alert(retourSql)}
                    initPage();
                    }
            })
    Désolé pour le double post, pas trouvé le bouton "modifier"

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

Discussions similaires

  1. [AJAX] Appel AJAX dans Spring mvc 3 en utilisant Datatable et Dialog
    Par skudersky dans le forum jQuery
    Réponses: 0
    Dernier message: 27/02/2013, 19h13
  2. [AJAX] Appel Ajax dans une boucle Php
    Par mycha25 dans le forum AJAX
    Réponses: 1
    Dernier message: 30/03/2012, 13h33
  3. [AJAX] Appel Ajax dans un appel Ajax avec JS et PHP
    Par Gajilidd dans le forum AJAX
    Réponses: 10
    Dernier message: 27/08/2010, 13h36
  4. appel Ajax dans la même instance de classe
    Par totoz dans le forum ASP.NET
    Réponses: 3
    Dernier message: 21/10/2009, 12h09
  5. [script.aculo.us] Appel Ajax dans Ajax
    Par guiltouf dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 22/05/2007, 13h29

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