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 :

Attribut data-* valeur format json


Sujet :

jQuery

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut Attribut data-* valeur format json
    Bonjour à tous,
    Pour un besoin, je souhaite stocker un retour json ajax dans un attribut data-*. J'ai donc ce code qui marche parfaitement pour signifier que le retour est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $.ajax({
    	//***
    	dataType: 'json',
    	success: function(data){
    		var items = data.obj
    		for(var i in items){
    			$("<option/>",{value: items[i].id, html: items[i].name}).appendTo("#elt");
    		}
    	}
    });
    Je souhaite maintenant sauvegarder mon objet dans un dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $.ajax({
    	//***
    	dataType: 'json',
    	success: function(data){
    		$("#elt").data("items",data.obj);
    		// or $("#elt").attr("data-items",data.obj);
    		var items = $("#elt").data("items");
    		// or var items = $("#elt").attr("data-items");
    		for(var i in items){
    			$("<option/>",{value: items[i].id, html: items[i].name}).appendTo("#elt");
    		}
    	}
    });
    Pourtant c'est le même objet json que j'ai juste sauvegardé et rappelé. Pourquoi le second code ne marche pas ?

    Et firebug me montre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select id="elt" data-items="[object Object]">
    l'attribut se créé bien mais comporte un tableau bizarre [object Object]

    Qu'est-ce qui ne va pas ?

    Merci d'avance...

  2. #2
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myjson=$.parseJSON($('#obj').data('item') )
    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 !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myjson=$.parseJSON($('#obj').data('item') )
    J'ai ce message d'erreur :
    SyntaxError: JSON.parse: unexpected character
    Merci d'avance...

  4. #4
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Il y a de fortes chances que ton JSON soit tout simplement mal formé.
    Il ressemble à quoi ?
    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

  5. #5
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    c'est que le contenu de dta-item n'est pas un string json correctement formatté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data-item="{'key1':'data1', 'key2':'data2'}"
    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 !

  6. #6
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "{'key1':'data1', 'key2':'data2'}"

    Ce n'est pas un format valide pour du JSON justement. Le seul délimiteur accepté pour les attributs et les valeurs est la double quote : "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '{"key1":"data1", "key2":"data2"}'
    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

  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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    :red:
    sinon suffit de faire un replace sur la chaine...

    bref mais pas un array en tout état de cause []
    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 éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    voici un modèle json de retour de success ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"obj":[{"id":"49","name":"Dja et Lobo"},{"id":"50","name":"Mvila"},{"id":"51","name":"Oc\u00e9an"},{"id":"52","name":"Vall\u00e9e du Ntem"}]}
    depuis firebug.

  9. #9
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    et tu les mets ou ce retour ???
    quel rapport avec data-item ??
    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 !

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $.ajax({
    	//***
    	dataType: 'json',
    	success: function(data){
    		$("#elt").data("items",JSON.stringify(data.obj));
    		var items = $.parseJSON($("#elt").data("items"));
    		for(var i in items){
    			$("<option/>",{value: items[i].id, html: items[i].name}).appendTo("#elt");
    		}
    	}
    });
    Ce code marche, mais un autre souci surgit. IE et JSON.stringify().
    Que faire ?

  11. #11
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    ????
    quel est le souci avec stringify ???

    concatène toi même le json
    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 !

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ????
    quel est le souci avec stringify ???
    Il ne marche pas avec IE < 8.

    Citation Envoyé par SpaceFrog Voir le message
    concatène toi même le json
    Je ne comprends pas.

  13. #13
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    dis nous plutoy ce que tu cherches à faire avec ton stringify ??
    tu l'utilises ou et pour faire quoi ?
    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 !

  14. #14
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    concatène toi même le json
    Mon json est généré en php avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo json_encode($temp_array);
    C'est du json mal formaté ?

  15. #15
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    dis nous plutoy ce que tu cherches à faire avec ton stringify ??
    tu l'utilises ou et pour faire quoi ?
    Le code ci-haut n'est que pour tester un retour ajax json et l'insérer dans un attribut data-* pour utilisation plutard.

    Pour mon besoin réel, pour limiter beaucoup de transaction ajax, je fais juste une requête ajax et je sauvegarde des infos dans data-* pour utilisation future. Cela augmenterait la vitesse de l'appli. Je pense.

    Merci.

  16. #16
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ce que je ne comprends pas, ce sont les messages de Firebug...

    Et firebug me montre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select id="elt" data-items="[object Object]">
    l'attribut se créé bien mais comporte un tableau bizarre [object Object]
    qui est incohérent avec $(element).data(...).
    J'imagine que tu as plutôt utilisé $(element).attr(...) qui n'a aucun intérêt dans ce contexte.

    Ce qu'il faut savoir, c'est que jQuery récupère automatiquement les attributs HTML data-xxx pour les transformer en objet data interne. Mais une fois la page chargée, créer ce type d'attribut ne peut qu'être problématique...
    Les propriétés data de jQuery et les dataset ne sont pas exactement la même chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('body').data('toto', 'foo');
    document.body.dataset.toto = 'bar';
    console.log(document.body.dataset.toto, $('body').data('toto'));
    Personnellement, je n'ai jamais eu de souci avec cette façon de faire
    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

  17. #17
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Citation Envoyé par okoweb Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		$("#elt").data("items",JSON.stringify(data.obj));
    		var items = $.parseJSON($("#elt").data("items"));
    ;
    Ce code marche, mais un autre souci surgit. IE et JSON.stringify().
    Que faire ?
    J'ai l'impression qu'il y a une petite confusion entre $.data()
    et l'attribut data-items

    avec $("#elt").data("items", qqch); Jquery associe un hash avec elt et tu peux
    mettre ce que tu veux dedans. Il n'y a pas besoin de sérialiser ton json pour le
    stocker avec $.data()

    Ceci devrait suffir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	$("#elt").data("items", data.obj);
    	var items = $("#elt").data("items");
    Par contre si tu voulais fixer l'attribut data-items, tu devrais sérialiser et
    écrire qqch du genre: $("#elt").attr("data-items",JSON.stringify(data.obj));
    Ce qui n'a pas grand intérêt coté client.

    Si du coté PHP tu renvoie du json dans un fragment html, alors cela
    ressemblerait à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $json = json_encode($obj);
    echo "<div id='#elt' data-items='$json'>"; // en escapant les caractères tels que "
    Coté js alors, tu devrais evaluer ton json avec qqch du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        var items = $.parseJSON($("#elt").attr("data-items"));
    EDIT: Merci bovino, je découvre l'automatisme de jquery pour rendre accessible les attributs data-xxx avec la fonction $.data('xxx')

  18. #18
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $("#elt").data("items", data.obj);
    var items = $("#elt").data("items");
    Exactement ce code marche parfaitement bien. J'avais testé j'ai eu une erreur. Maintenant ça marche, pourtant bien mon code initial.

    Merci à vous tous.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/11/2012, 09h53
  2. Appel d'un web service qui attend des data au format JSON
    Par kazh75 dans le forum Réseau/Web
    Réponses: 6
    Dernier message: 31/03/2011, 10h48
  3. algorithme de compression des data en format PNG
    Par vbany dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 07/04/2006, 14h08
  4. [FPDF] comment afficher une valeur formatée
    Par fabrice1596 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/04/2006, 19h37
  5. Attribution de valeur à une matrice
    Par Progs dans le forum C++
    Réponses: 13
    Dernier message: 24/09/2005, 23h43

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