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 :

Test de l'exécution d'un script php [AJAX]


Sujet :

jQuery

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut Test de l'exécution d'un script php
    Bonjour à tous,

    Je débute en AJAX et malgré 2 heures passées à googler sur le sujet, je n'ai toujours pas eu le déclic, alors je fais appel à vos lumières...

    J'ai donc un script PHP, lancé via une requête AJAX, qui vérifie et traite les données d'un formulaire (qui permet la modif de données de contacts) situé dans ma page html principale, puis réinjecte du code (en l'occurrence un tableau avec la liste des contacts mise à jour après modif du contact) dans cette même page html, à l'intérieur de la DIV id="liste".

    En AJAX, ça donne ça (simplifié) :
    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
    $(function () {
        var $bouton = $('#valider');
        $bouton.on('click', function () {
            var IdContact = $('#idcontact').attr('value');
            var Nom = $('#nom').attr('value');
            var Prenom = $('#prenom').attr('value');
            var Chaine = '?rappelIdContact='+IdContact+'&nom='+Nom+'&prenom='+Prenom;
            if (Nom == '') {
                alert('Le NOM est un champ obligatoire !');
            }
            else {
                if (Prenom == '') {
                    alert('Le PRENOM est un champ obligatoire !');
                }
                else {
                    $.ajax({
                        type: "POST",
                        url: "update.php,
                        data: Chaine,
                        cache: false,
                        success: function(result){
                            $("#liste").html(result);
                        }
                    });
                }
            }
            return false;
        });
    });
    Et mon script update.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
    // teste l'existence et le contenu des paramètres de la requête Ajax
    if (isset($_POST['rappelIdContact']) && !empty($_POST['rappelIdContact'])) {$IDCONTACT= $_POST['rappelIdContact'];} else {$IDCONTACT= 0;}
    if (isset($_POST['nom']) && !empty($_POST['nom'])) {$NOM= $_POST['nom'];} else {$NOM= "";}
    if (isset($_POST['prenom']) && !empty($_POST['prenom'])) {$PRENOM= $_POST['prenom'];} else {$PRENOM= "";}
    // vérifie l'existence de l'IdContact dans la BDD
    $reqSelect = @mysql_query("SELECT IdContact FROM liste_contacts WHERE IdContact LIKE ".$IDCONTACT);
    $totSelect = mysql_num_rows($reqSelect);
    if ($totSelect == 1) {
        // MAJ de la BDD avec les données du formulaire + requête et listage de la liste des contacts à jour
        .....blablabla
        return TRUE;
    }
    else {
        // simplement requête et listage de la liste des contacts, vu que l'IdContact n'a pas été repéré dans la BDD et qu'une requête MAJ est du coup impossible
        .....blablabla
        return FALSE;
    }

    Je précise que tout fonctionne à merveille, mais j'aimerais seulement récupérer le retour de l'éxécution de mon script php pour afficher une alerte JS du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (le retour du script update.php == TRUE) {alert('Modif effectuée !');} else {alert('Oups !');}
    Dans ma requête AJAX, j'avais essayé de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        (...)
        success: function(result){
            $("#liste").html(result);
        }
        if (result) {alert('OK');} else {alert('Oups');}
    Mais j'obtiens systématiquement 'OK' même si le script PHP a renvoyé FALSE, sûrement parce qu'il s'agit du bon envoi de la requête AJAX, et non pas du résultat de l'exécution du script appelé.

    Bref, je patauge !

    Merci @+

  2. #2
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    La requête lancée en AJAX est asynchrone : elle se déclenche quand elle a finit, et non pas dans l'ordre logique de lecture de ton navigateur.

    Si tu veux déclencher une action lorsque la fonction AJAX s'est terminée, tu dois placer le code dans le scope "success" de l'appel AJAX.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    success: function(result){
            $("#liste").html(result);
            if (result) 
                       alert('OK');
    }

    Si tu veux une autre popup dans le cas d'une erreur, tu dois la placer dans le scope "error".


    Voir la doc ici.

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ca n'a pas trop de rapport... Dans son cas, le problème vient du fait que son script PHP ne renvoie rien !

    Quand tu fais un return true en PHP, ça ne va pas renvoyer true au script JavaScript. Pour renvoyer une valeur, il faut faire de la même manière que pour une page appelée directement, c'est-à-dire des echo.
    Comprendre les mécanismes d'AJAX.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Mais la variable result n'est pas peuplée là où il tente de l'afficher... Si ?

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Bah si puisque c'est le retour de la requête...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    success: function(result){
        $("#liste").html(result);
    }
    Le seul truc, c'est que comme le script PHP ne renvoie rien au script jQuery, la variable est vide...

    EDIT
    Arf, j'avais pas vu le dernier code et effectivement, dans ce dernier, la dernière ligne est mal placée, au temps pour moi.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Merci à tous les deux, Isythiel et Bovino

    @Isythiel : même si j'inclue mon test à l'intérieur de la fonction, cela ne va faire que tester le bon envoi de la requête Ajax, mais pas l'exécution du script php lui-même

    @Bovino : je veux bien faire un "echo TRUE" ou echo "FALSE" dans mon script PHP, mais d'une part cet echo va s'afficher dans ma page parsée ce qui est bien sûr totalement inélégant (!), et d'autre part mon script n'est pas censé ne renvoyer qu'un echo True ou False, mais tout un tas de code html, je ne pige pas la façon dont Ajax va se dépatouiller pour trouver ce "TRUE" (ou "FALSE") au milieu de tout le code injecté.
    Franchement y'a un truc qui m'échappe encore, j'ai dû rater qq chose...
    Vous moquez pas

  7. #7
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Dans ce cas, il faut que tu organises ta réponse sous forme d'un "objet" JSON (par exemple), avec
    • Le code de retour true ou false
    • Le contenu HTML à placer dans ta page

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Merci à vous pour votre aide !

    Comme la mise en oeuvre ma paraît bien complexe pour juste une petite alerte JS, j'abandonne le concept et je vais m'orienter sur l'affichage d'une DIV façon popup à l'intérieur de mon script php.
    Je mets donc quand même en résolu..
    Merci quand même ;-)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/02/2015, 13h27
  2. exécution d'un script php à heure fixe
    Par benkunz dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 02/04/2007, 18h29
  3. Réponses: 6
    Dernier message: 12/12/2006, 01h30
  4. [PHP-JS] Problème d'exécution d'un script php
    Par Yoteco dans le forum Langage
    Réponses: 1
    Dernier message: 06/10/2006, 14h19
  5. [Système] Exécution d'un script PHP à heures fixes
    Par Kiyomizu dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2006, 09h30

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