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 :

Passer une fonction [AJAX]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2020
    Messages : 62
    Par défaut Passer une fonction
    bonjour à tous
    mes compétences étant trés limitées dans ce domaine (et pas que ...) je me tourne vers vous
    pour trouver de l'aide.

    Description:

    1 - J'envoie une requête POST / AJAX /JSON vers une api qui me répond avec des données de format JSON (fonction liste)
    2 - je dois lire ces données retournées sur un champs ciblé (parseJSON)
    3 - je dois repasser une fonction pointant sur ces données (fonction remove)

    Si j'envoie bien la requête, reçoit bien les données et sait extraire ce que je cherche, je ne sais en revanche pas comment passer ma fonction "remove" en pointant sur les données lues.

    Je suis clair ? Pas sur hein .... voici le 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
    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
    function liste() {
        $.ajax({
            type: "POST",
            url: "/cgi/liste.cgi",
            contentType: "application/json",
            dataType: "json",
            data: JSON.stringify({
                "apiVersion": "1.0",
                "context": "789",
                "method": "list",
                "params": {}
            }),
            success: function (data) {
                parseJSON(data);
            },
            error: function (err) {
                console.log("Probleme rencontre", err);
            }
        }); // cette requete fonctionne, les données sont bien envoyées
        var parseJSON = function (data) {
            $(data).each(function (i) {
                createHTML(this);
            });
        }
        var createHTML = function (element) {
            for (var i = 0; i < element.data.textOverlays.length; i++) {
                var overresult = $("<p>").html(element.data.textOverlays[i].identity);
                $("#overlaytexte").append(overresult);
                // ici je cherche donc à recupérer le contenu de "identity" qui sont des entiers compris entre 1 et 4 que je dois supprimer apres
                // ces nombres apparaissent bien dans la div overlaytexte
            };
        }
        // ci-dessous la fonction suppliste() qui me permet de supprimer les données de "identity", j'ai mis 1 comme donnée fixe mais ce que je souhaite c'est supprimer les données récupérées précédemment avec liste()
        function suppliste() {
            $.ajax({
                type: "POST",
                url: "/cgi/remove.cgi",
                contentType: "application/json",
                dataType: "json",
                data: JSON.stringify({
                    "apiVersion": "1.0",
                    "context": "789",
                    "method": "remove",
                    "params": {
                        "identity": 1 // c'est ici que je devrais mettre les données lues avant
                    }
                }),
                success: function (data) {
                    $("#overlaytexte").html("<strong><font color=red>Texte supprime !" + (JSON.stringify(data)) + "</font></strong>");
                }
            });
        }
    }
    Pour moi c'est trop compliqué, je ne sais pas comment lancer cette requette avec les bonnes valeurs.

    D'avance merci.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    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 513
    Par défaut
    Salut,

    Le plus simple est de déclarer une variable var identities; tout au début du script, et quand tu reçois les données dans le success d'ajax de liste(), tu affectes les valeurs à identities pour l'initialiser, et après tu l'utilises dans suppliste() (à condition qu'il est au moins intialisé!).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var identities;
    function liste() {...}
    var parseJSON = function (data) {
            identities=$.map(data.data.textOverlays,function(elem,index){return elem.identity;});//retourner seulement les valeurs de identity de chaque item
            $(data).each(function (i) {
                createHTML(this);
            });
        }
    Et dans suppliste(), il ne reste plus qu'à passer identities en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "params": {
                        "identity": identities
                    }
    Après tu peux remplacer la boucle for par $.each pour utiliser les fonctions jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    createHTML = function (element) {
     $(element.data.textOverlays).each(function(index,overlay){
         $("#overlaytexte").append($("<p data-id='"+overlay.identity+"' >").html(overlay.identity));
     });
     }
    L'attribution de data-id aux <p> te sera utile après ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2020
    Messages : 62
    Par défaut essai non concluant
    Merci toufik pour ton aide, j'ai testé avec ce code sans succès, quand je tente d'afficher le contenu
    de identities je recupere "undefined"

    Peut etre que la variable n'est pas déclarée au bon endroit (var identities)?

    Voici le code modifié:
    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
     
     
    var identities;
    function listoverlaytexte(){
        $.ajax({
            type: "POST",
            url: "/cgi/dynamicoverlay/dynamicoverlay.cgi",
            contentType: "application/json",
            dataType: "json",
            data: JSON.stringify({
               "apiVersion": "1.0",
               "context": "789",
               "method": "list",
               "params": {
                              }
                    }),
     
                    success: function( data ){
                    console.log("data :",data);
                    parseJSON(data);
                                    },
            error: function(err)
                            {
                            console.log("Probleme rencontre", err);
                            }
                    });
     
                    createHTML = function (element) {
                    $(element.data.textOverlays).each(function(index,overlay){
                    $("#lm2soverlaytexte").append($("<p data-id='"+overlay.identity+"' >").html(overlay.identity)); //les données de "identity" s'affichent bien
                    });
                    }
            }
     
            var parseJSON = function (data) {
            identities=$.map(data.data.textOverlays,function(elem,index){return elem.identity;});//retourner seulement les valeurs de identity de chaque item
            $(data).each(function (i) {
                createHTML(this);
            });
                }
     
        function suppliste(){
     
        $.ajax({
            type: "POST",
            url: "/cgi/dynamicoverlay/dynamicoverlay.cgi",
            contentType: "application/json",
            dataType: "json",
            data: JSON.stringify({
               "apiVersion": "1.0",
               "context": "789",
               "method": "remove",
               "params": {
               "identity": identities    // si je remplace identities par 1, la fonction fonctionne, identities est "undefined"
                             }
                    }),
            success: function( data ){
            $( "#overlaytexte" ).html( "<strong><font color=red>Texte supprime !" + (JSON.stringify(identities)) + "</font></strong>" );
                                    }
        });
    }
    merci pour votre aide.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    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 513
    Par défaut
    A quel moment tu appelles la fonction suppliste et ou ?

    Sinon et si tu veux le faire proprement, il faut que liste() retourne une promesse et l'objet $.Deferred() :
    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
     
     function liste(){
        var def=$.Deferred();
        $.ajax({url:"/cgi/liste.cgi",dataType:"json",data:{....},method:"post"})
       .done(function(data){
           console.log('success :',data); 
           parseJSON(data);
           def.resolve(identities);//résoudre l'objet deferred.
     
       })
       .fail(function(err){
          def.reject();//rejeter l'objet deferred.
          alert(err.responseText);
       });   
     return def.promise();//retourne une promesse de l'objet deferred.
     }
     
     //appelle de liste() avec when et then vu qu'elle est une fonction asynchrone :
    $.when(liste())
    .then(function(d){
        console.log("identities :",d);
    });
     
    function suppliste(){//Je veux toujours savoir à quel moment tu appelles cette fonction et ou? dans le même script? ou bien ailleurs...?
       //....
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2020
    Messages : 62
    Par défaut fonctions
    Toufik,

    Oui le problème est la car j'appelle les 2 fonctions liste() et suppliste() avec 2 boutons différents type "onclick()", je ne voudrais appeler
    qu'une seule fonction qui appelle suppliste().

    Quand je procède avec les 2 boutons onclick(), la variable "identities" dans ce cas est vide.

    Je teste ce que tu as mis ci-dessous.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    au passage, lorsque l'on écrit dataType: "json", lors d'une requête le résultat retourné n'a pas besoin d'être parser, donc console.log("data :",data) affiche un objet JavaScript.

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

Discussions similaires

  1. traitement sur une chaîne, votre aide souhaitée !
    Par netlink1987 dans le forum Débuter
    Réponses: 11
    Dernier message: 16/03/2020, 16h20

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