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 :

Mise à jour d'une colonne ou d'un élément dans une table


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut Mise à jour d'une colonne ou d'un élément dans une table
    Bonjour,
    Suite à une requête ajax pour rafraichir une cellule ou une colonne d'une table (7x4), je reçois au format Json :

    - soit pour une cellule du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"result":{"i":"5","j":"2","val":"17.0"}}
    5ème ligne, 2ème colonne, valeur

    - soit pour une colonne du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"result":{"j":"3","val":["10.2","4.2","8.5","4.1","5.0","2.8","9.1"]}
    valeurs pour la 3ème colonne

    Mis à part une fonction javascript qui effectue une itération sur la table, je n'ai pas réussi à implémenter un code jQuery qui donne une solution plus simple. Alors un squelette de code serait le bienvenu.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    vous pouvez tester s'il y a un "i" dans le résultat comme cela :

    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
    var v1 = {"result":{"i":"5","j":"2","val":"17.0"}};
    var v2 = {"result":{"j":"3","val":["10.2","4.2","8.5","4.1","5.0","2.8","9.1"]}};
     
    testReponse(v1);
    testReponse(v2);
     
     
    function testReponse(reponse) {
     
        if ("string" === typeof reponse.result.i) {
     
            console.log("Il y a un \"i\".");
     
        } else if ("undefined" === typeof reponse.result.i) {
     
            console.log("Il n'y a pas de \"i\".");
     
        }
     
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut
    Bonjour,
    De retour sur le sujet après un passage par le back-office.
    Après quelques modifs, je travaille uniquement sur la 2ème colonne et j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        this.displayCoefficients = function(/*String*/ res) {
             $('#tab_coef tr > td:nth-child(2)').each(function(i, res) {
                 /* affichage anciennes valeurs */
                console.log("cellule : " + $(this).html());
                /*affection des nouvelles valeurs */
                $(this).html(res.i);
             });
    }
    Qui doit utiliser le retour Ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     {"result":["10.2","4.2","8.5","4.1","5.0","2.8","9.1"]};
    Avec la partie ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    obj = jQuery.parseJSON(xhr.responseText);
                    callbackResult(obj.result);
    Si ce code fonctionne bien concernant le sélecteur (affichage des anciens coefficients), je n'ai pas d'affectation des nouvelles valeurs reçues suite à la requête.
    donc $(this).html(res.i) n'est pas correct.
    Des idées?

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    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 507
    Par défaut
    pour que cela fonctionne, il faut enlever 'res' qui est dans le each :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $('#tab_coef tr > td:nth-child(2)').each(function(i, res){...});
    puis pour remplir le td tu fais : au lieu de .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    json = {
      "result": ["10.2", "4.2", "8.5", "4.1", "5.0", "2.8", "9.1"]
    };
    displayCoefficients = function(res) {
      $('#tab_coef tr > td:nth-child(2)').each(function(i) {
        $(this).html(res[i]);
      });
    }
    displayCoefficients(json.result);

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut
    Parfait, celà fonctionne.
    Merci.

    Je pensais que, comme l'on ouvrait une nouvelle fonction each(function(...){...}il fallait transmettre le paramètre res.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/03/2015, 11h46
  2. Réponses: 3
    Dernier message: 27/07/2012, 11h25
  3. Réponses: 5
    Dernier message: 24/11/2011, 11h22
  4. [XL-2000] Mise en forme condit en fonction 3 caractères trouvé dans une colonne
    Par crissud dans le forum Conception
    Réponses: 3
    Dernier message: 28/12/2010, 14h16
  5. Réponses: 3
    Dernier message: 10/05/2007, 07h43

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