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 :

Est-il possible de convertir un objet [object Object] en JSON ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    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 511
    Par défaut Est-il possible de convertir un objet [object Object] en JSON ?
    Salut,

    j'ai un FormData que j'envois via $.ajax, dans lequel je stock un objet comme suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fd=new FormData();
    fd.append("data",{draw:"xxx",search:{value:"une valeur",regex:false},image:$("#myFile").get(0).files});
    Quand j'essaie de le parcourir avant de l'envoyer au php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(let a of fd.entries()){
       console.log("cle :",a[0],", valeur :",a[1]);//affiche : cle :data ,valeur :[object Object]
    }
    Ajax :
    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
     
    $.ajax({
    	url:"upload.php",
    	method:'post',
    	dataType:"json",
    	enctype:"multipart/form-data",
    	processData:false,//cette option et la suivante posent problème
    	contentType:false,
    	data:fd,
    	success:function(d){
    		console.log(d);
    	},
    	error:function(err){
    		alert(err.responseText);
    	}
    });
    La valeur de data est [object Object] et impossible de récupérer les valeurs de cet objet vu qu'il est de type string.

    J'ai tout testé, et ni JSON.stringify() ni Array.from ne renvoient le résultat souhaité.

    Le problème c'est que j'ai besoin d'envoyer le FormData en tant qu'objet JSON afin que le php puisse le récupérer en tant que array, comme ça je n'aurais plus besoin d'utiliser json_decode() en php.

    Note : avec json_decode() je récupère bien les valeurs du FormData sans souci, mais je voudrais bien l'éviter si c'est possible.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    l'objet formData est itérable et il n'est qu'à regarder dans la console pour voir que l'on a à disposition certaines méthodes intéressantes comme forEach ou encore entries.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function formDataToObject(data) {
      data.forEach((value, key) => {
        console.log(key, "=", value);
      });
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function getFormDataEntries(data) {
      for (const entry of data.entries()) {
        console.log(entry[0] + ', ' + entry[1]);
      }
    }
    en le parcourant donc tu peux en faire ce que tu veux

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

    Merci pour la réponse, mais je vois qu'il n'est pas possible d'ajouter un objet imbriqué au FormData en un seul coup sans JSON.stringify , car lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dt={data:{draw:1,search:{value:"",regex:false}}};
    fd.append("data",dt.data); //ça m'affiche data:[object Object]
    Par-contre si je parcours le dt.data avec $.each, quand la valeur n'est pas un objet je l'ajoute directement, sinon je fais un deuxième $.each en utilisant les crochets [] dans FormData pour l'indexer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $.each(dt.data,function(k,v){
       if($.type(v)!='object'){
            fd.append(k,v);
       }
        else{
             $.each(v,function(k1,v1){
                   fd.append(k+"["+k1+"]",v1);
             });
        }
    });
    Là ça m'affiche le résultat souhaité : {draw:1,search:{value:"",regex:false}} et comme ça je n'aurais pas besoin d'utiliser JSON.stringify en js ni json_decode() en php.

    Je ne sais pas s'il y'a mieux, mais pour le moment ça fonctionne.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Je ne sais pas s'il y'a mieux, mais pour le moment ça fonctionne.
    c'est une bonne solution attendu qu'elle respecte le format d'une « sérialsation ».

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 02/06/2008, 16h40
  2. Réponses: 4
    Dernier message: 21/05/2008, 13h40
  3. Réponses: 2
    Dernier message: 19/09/2007, 10h21
  4. [XSLT] Est-il possible de convertir un fichier texte en XML ?
    Par ANISSS dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/04/2007, 16h51
  5. Est il possible de dissocier un objet placer ds un GroupBox
    Par Yphon dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/01/2006, 10h45

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