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 :

Récupérer le résultat de la fonction appelée par $.post


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut Récupérer le résultat de la fonction appelée par $.post
    Bonjour.

    J'ai ce petit bout de JS qui fait une requête AJAX pour savoir si un élément existe déjà dans la BDD.
    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 validityDissolution = validity(form.numDissolution,"dissolution");
     
    function validity(champ, type) {
        var value = champ.value;
        idResult = getIdErreur(champ);
     
        $.post("verif_validity_elem.php", {value : value, type : type}, function(data){
            alert("data="+data);
            if(data==0) {
                surligne(champ, false);
    		    document.getElementById(idResult).innerHTML = '';
                return true;
                }
            else {
                surligne(champ, true);
                document.getElementById(idResult).innerHTML = 'Le numéro existe déjà.';
                return false;
                }
            });
           //si je fais le return ici ça marche
        }
    Je souhaiterais récupérer le data du du post dans "validityDissolution" mais je n'arrive pas a le faire remonter jusque là ( je reste avec mon "validityDissolution"=undefined)
    J'ai remarqué que si je fais un retun aprés la fonction de la requete ajax, ça marche, mais il faudrais que je puisse faire remonter mon data jusque là...

    Quelqu'un aurait-il une solution? =)

    Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Je ne sais pas trop si on a le droit de faire ça, mais je n'ai toujours pas réussi à résoudre mon problème.
    Je met donc un petit up ?

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 213
    Par défaut
    Bonjour,
    je ne vois pas pourquoi ne pas affecter la valeur au moment du retour de la requête !

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    J'ai toujours du mal a comprendre pour quoi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(idResult).innerHTML = '';
    si l'on utilise JQuery ...

    =>
    ou

    Mas là n'est pas le souci ...
    que retourne si tu récupère bien le data, qu'est ce qui t’empêche de l'utiliser à cet endroit là ??

    Je souhaiterais récupérer le data du du post dans "validityDissolution"
    Oui et donc on est supposé savoir ce qu'est validityDissolution ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Bonjour et merci pour votre aide.

    Vous voulez dire mettre à true ou false le data retourné par post?
    Je n'y avais même pas pensé. J'essaie de ce pas.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    @SpaceFrog
    Désolé je n'avais pas vu votre message.

    Il est vrai qu'il serait plus logique d'utiliser JQuery partout

    Je pense que le mieux est de réexpliquer correctement ce que je cherche à faire.
    Je souhaite faire une fonction pour tester si un nom est disponible dans la BDD et qui me retourne true, si le nom est disponible et false, si il est déjà pris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert("data="+data);
    Cette alert me permet juste de voir ce que me retourne mon post. J'obtient donc " 1" si le nom est disponible(data = true) et " " si il est indisponible(data = false).
    si tu récupère bien le data, qu'est ce qui t’empêche de l'utiliser à cet endroit là ??
    Je l'utilise déjà à cet endroit, en mettant le champ en reouge selon si le nom est dispo ou non. Mais ce que je souhaite faire c'est le faire remonter pour pouvoir le récupérer à l'appel de ma fonction dans "validityDissolution" que vous aviez cité et c'est la que je bloque.
    Je souhaiterais récupérer le data du du post dans "validityDissolution"
    Oui et donc on est supposé savoir ce qu'est validityDissolution ?
    Et donc validityDissolution est juste une variable dans laquelle je met le résultat de la fonction de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var validityDissolution = validity(form.numDissolution,"dissolution");

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    tu ne peux utiliser les élément qu'après leur réception ...

    donc tu dois soit faire ta manip directement dans le callback de ton post,
    soit faire un return de ton data dans le callback
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    soit faire un return de ton data dans le callback
    C'est justement ce que j'essaie de faire mais je ne vois pas comment récupérer la valeur aprés un return effectué dans le callback
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var dispo = $.post("verif_validity_elem.php", {value : value, type : type}, function(data){
                alert(data);
            if(data==true) {
                surligne(champ, false);
    	    $('#'+idResult).html('');
                }
            else {
                surligne(champ, true);
                $('#'+idResult).html('Le numéro existe déjà.');
                }
                return data;
            });    
        alert(dispo);
    J'aurais aimé faire quelque chose comme cela mais je ne vois vraiment pas comment m'y prendre... Dans l'esprit c'est ce que vous vouliez dire non?

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 213
    Par défaut
    Je pense qu'un petit passage par la documentation s'impose

    jQuery.post()

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Je viens de faire des recherches supplémentaires avec le terme "callback" que j'avais zappé lors de mes précédentes recherches et je viens de comprendre pourquoi vous m'aviez dis :
    tu ne peux utiliser les élément qu'après leur réception ...
    AJAX étant asynchrone, dans tous les cas je n'aurais pas pu récupérer mon return puisque que me fonction dans laquelle se trouve mon ajax se serait terminée bien avant.
    Mais j'ai aussi vu qu'il est possible de faire de l'ajax en synchrone. A présent je fais donc :
    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
     
        $.ajax({
            url: "verif_validity_elem.php",
            type: "POST",
            async: false,
            data: ({
                value : value,
                type : type
                }),
            complete: function(data){
                if(data==true) {
                    surligne(champ, false);
    		        $('#'+idResult).html('');
                    }
                else {
                    surligne(champ, true);
                    $('#'+idResult).html('Le numéro existe déjà.');
                    }
                }
            });
    Mais je ne vois toujours pas comment retourner mon "data".
    Pouriez-vous m'éclairer de votre lumière =).

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    @NoSmoking
    Lecture déjà effectuée plusieurs fois mais je n'arrive pas à y trouver mon bonheur.
    Vous voulez m'orienter dessus par rapport a mon utilisation du callback?
    Par ailleurs pouvez-vous me dire si l'utilisation de $.ajax en synchrone au lieu de $.post pour pouvoir retourner mon data est appropriée?

    Je dois avouer que je suis complètement perdu avec AJAX...

  12. #12
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 524
    Par défaut
    bonjour,

    je pense que la fonction jQuery $.ajax() est faite pour ce genre de traitement, elle contient des fonctions très utiles comme beforesend,success et complete.

    essaie de recevoir ton data dans la fonction success, puis tu fais la traitement dans la fonction complete.

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Bonjour,
    Probléme résolu.
    Les erreurs que j'avais fait et sur lesquels vous m'aviez aiguillé mais que je n'avais pas compris:
    - Je ne prenais pas en compte que $post ne pouvais s'utiliser qu'en asynchrone.
    - J'utilisais complete au lieu de success.

    Je fais donc :
    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
     
    var dispo;
     
        $.ajax({
            url: "verif_validity_elem.php",
            type: "POST",
            async: false,
            data: ({
                value : value,
                type : type
                }),
            success: function(data){
                alert("data ="+data);
                dispo = data;
                }
            });
    return dispo; // pour pouvoir récuperer le data plus haut
    Merci.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    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
    var dispo;
     
        $.ajax({
            url: "verif_validity_elem.php",
            type: "POST",
            async: false,
            data: ({
                value : value,
                type : type
                }),
            success: function(resp){
                console.log (resp);
                dispo = resp;
                }
            });
    quelle est le traitement effectué sur le serveur ?
    Regarde en console pour voir la réponse reçue dasn l'onglet xhr puis ce que tu as comme message en console.log ..
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Wow vous avez été vraiment rapide.
    Coté serveur, je fais une simple requête sur ma BDD qui me donne une réponse binaire.

    J'ai fais un JSONstringify sur mon data, c'est ce qui m'a mis sur la piste comme j'utilisais complete, j'obtenais une réponse avec plusieurs éléments dedans en plus de la réponse que j'attendais.
    Une nieme lecture de la doc de $ajax m'a enfin fait comprendre quelle fonction utiliser.

    Merci!

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

Discussions similaires

  1. Fonction appelée par un clic, mais en boucle
    Par Msieurduss dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 20/03/2009, 14h47
  2. [VBA-Excel] fonction appelée par plusieurs bouton : quel bouton ?
    Par thierryyyyyyy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/06/2007, 18h24
  3. Réponses: 2
    Dernier message: 18/06/2007, 09h43
  4. Récupérer le résultat d'une fonction dans une balise html
    Par Hayato dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2006, 17h04
  5. Réponses: 6
    Dernier message: 08/06/2006, 10h07

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