11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Cela fais maintenant plus d'une semaine que je coince sur le problème suivant sans trouver de solution.

La réponse AJAX depuis mon fichier php me renvoie un json , il est constitué de 2 array:
L'un contient plusieurs champ qui me permette de connaitre le status de ma requete SQL. il ne contient qu'un tuple.
L'autrei contient un ou plusieurs tuple.

voici le retour json que j'affiche en console:


data:
	0:
		codeProduit:"398"
		dateMouvement:"19/09/2017"
		montantHT:"3,05"
		montantT2A:"0"
		montantTTC:"3,2635"
		numMVT:"1034988"
		prnom:"NATISPRAY 0,15 MG / DOSE"
		quantite:"1"
		refence:"1133779"
		ufSelection:"6210"
	1:
		codeProduit:"1615"
		dateMouvement:"20/09/2017"
		montantHT:"9"
		montantT2A:"0"
		montantTTC:"9,45"
		numMVT:"1036114"
		prnom:"produit 1 (produit)"
		quantite:"50"
		refence:"2330731"
		ufSelection:"6045"
	2:
		codeProduit:"3897"
		dateMouvement:"20/09/2017"
		montantHT:"17,57"
		montantT2A:"0"
		montantTTC:"18,7999"
		numMVT:"1035988"
		prnom:"Sproduit 2 (produit)"
		quantite:"7"
		refence:"6003376"
		ufSelection:"6045"
	3:
		codeProduit:"6270"
		dateMouvement:"21/09/2017"
		montantHT:"289,23"
		montantT2A:"301,171"
		montantTTC:"309,4761"
		numMVT:"1036353"
		prnom:"produit 3 (produit))"
		quantite:"1"
		refence:"9032582"
		ufSelection:"6011"
	4:
		codeProduit:"6270"
		dateMouvement:"21/09/2017"
		montantHT:"289,23"
		montantT2A:"301,171"
		montantTTC:"309,4761"
		numMVT:"1036352"
		prnom:"produit 3 (produit)"
		quantite:"1"
		refence:"9032582"
		ufSelection:"6011"
	codeProduit:""
	dateMouvement:""
	messageError:""
	montantHT:""
	montantT2A:""
	montantTTC:""
	numMVT:""
	prnom:""
	quantite:""
	reference:""
	resultat:""
	ufSelection:""
succes:
	dateDebutLot:"2017-09-19"
	dateDebutLotError:""
	dateFinLot:"2017-09-21"
	dateFinLotError:""
	download:"non"
	downloadError:""
	isSucces:true
	


et voici la portion de code qui me permet de traité les informations:

$.ajax({
        type: 'POST',
        // url qui contient le PHP destinataire ( attention au MVC !!!)
        url : 'objectifListeSorties.php',
        // variable  javascript à transmettr
        data: postdata,
        //type de variable  ici en mode json
        dataType:'json',
        // si succés alors executé la fonction suivante

        success: function(result){
          // en cas de succes de la requete executer par php qui est récuperé depuis le JSON
          if(result.succes.isSucces){
            console.log(result)
           // var longueur = [result.data];
          //  var longueur = JSON.parse(result.data)
            
            var obj =JSON.parse(result.data);
            
           
            // console.log(longueur.length)
            // for (var i=0;i<longueur.length;i++){
              // var montableau=("<td>" +result.data[i][prnom] + "</td><td>" +result.data[i][reference] +"</td><td>"+result.data[i][service]+"</td><td>"+result.data[i][datemvt]+"</td><td>"+result.data[i][dateinsertion]+"</td>")
              var montableau=("<td>" +longueur[i][prnom] + "</td><td>" +longueur[i][reference] +"</td><td>"+longueur[i][service]+"</td><td>"+longueur[i][datemvt]+"</td><td>"+longueur[i][dateinsertion]+"</td>")
            // }
            console.log(montableau);
            $("#tableauListSortie").html("<thead><tr><th>#</th><th class='header'>Code pharma</th><th class='header'>nom</th><th class='header'>reference</th><th class='header'>service</th><th class='header'>quantite</th><th class='header'>date mouvement</th><th class='header'>montant HT</th><th class='header'>montant TTC</th><th class='header'>montantT2a</th><th class='header'>numero de mouvement</th></tr></thead><tbody id='tableauControleSortieDetail'><tr><th scope='row'>1</th><td> 1</td><td> 1</td><td> 1</td><td> 1</td><td> 1</td><td> 1</td><td> 1</td><td> 1</td><td> 1</td><td> 1</td></tr></tbody><tr><td></td>"+montableau+"</tr>")
          }else{
            console.log(result)
            $("#messageErreur").html("<span id=\"clignote\" style=\"color:red\"><p>Une erreur est survenue lors de la requete PHP.<br> Voici la raison : "+result.messageError+"</p></span><br>");
          }
        },
        error: function(result){
          console.log(result)
          $("#messageErreur").html(result.messageError);
          //alert( result['codePharma'] );
          //alerte(postdata);
        }
      });


mon objectif est de sortir les données de l'array data afin d'alimenté un tableau pour ensuite l'affiché en html et de faire une boucle, mais je n'arrive pas a récupérer le nombre d'enregistrement que contient cette array.

avec vous la fonction "magique" qui me permette de recouper ce fichus nombre d'enregistrement.

en vous remerciant d'avoir pris le temps de me lire et d’éventuellement apporter un début de solution a mon problème.
Modifié par palouf34 (25 Sep 2017 - 13:57)
Bonjour,
Je crois que tu n'arrives pas à connaître la taille de ton tableau car ça n'en est pas un.
Si je lis bien ton arborescence, tu as les clefs suivantes:
data[0], data[1], ... data[4], data["codeProduit"], data["dateMouvement"] ...

Tu pourrais avoir:

data:
	prods:
		0:
			codeProduit:"",
			dateMouvement:"",
			...
		1:
			codeProduit:"",
			dateMouvement:"",
			...
		2:
			codeProduit:"",
			dateMouvement:"",
			...
	codeProduit:""
	dateMouvement:""

En faisant data["prods"].length, tu obtiendrais la longueur de ton tableau, car data["prods"] est un tableau.
Bonjour,


Merci d'avoir pris le temps de lire mon message.

j'ai tenté de faire ce que tu m'a demandé mais j'ai comme retour "undefined"


var longtruc=result["data"].length;

tout comme


var longtruc=result.data["data"].length;


mon json qui est renvoyé par mon fichier PHP contient 2 structure array différentes...

j'en suis arrivé a faire un boucle qui extrait chaque paramétre comme cela


for (i in result.data){
test pour chaque champ[i] "colonne" avec stockage des informations pour traitement ensuite

 avec élimination des lignes qui ne contiennent aucune données

remise à  null des colonnes pour la boucle suivante.
}


mais c'est pas la panacée, même si j'ai avancé un peux, car je rencontre des problèmes volume de données retourné par le PHP....


je suis sur qu'il y moyen de faire plus propre et plus stable.
Modifié par palouf34 (25 Sep 2017 - 16:49)
Pourrais-tu poster une copie d'écran de la console montrant le json que tu reçois, ou coller le json tel qu'il est réellement (un echo de la réponse renvoyée par ton php) ?
voila ce que l'echo depuis PHP me renvoie.


//pour  l'echo direct
 echo (array('succes'=>$array1,'data'=>$array2));
// pour le JSON
echo json_encode(array('succes'=>$array1,'data'=>$array2));

le retour récupérr dans la reponse json.

?Array{"succes":{"dateDebutLot":"2017-09-18","dateDebutLotError":"","dateFinLot":"2017-09-23","dateFinLotError":"","download":"non","downloadError":"","isSucces":true,"ufSelection":"0"},"data":{"codeProduit":"","prnom":"","reference":"","ufSelection":"","quantite":"","dateMouvement":"","montantHT":"","montantTTC":"","montantT2A":"","numMVT":"","messageError":"","resultat":"","0":{"codeProduit":"6144","prnom":"produit72","reference":"9031820","ufSelection":"6045","quantite":"1","dateMouvement":"18\/09\/2017","montantHT":"1,83","montantTTC":"1,9581","montantT2A":"0","numMVT":"1037771"},"1":{"codeProduit":"398","prnom":"produit25","reference":"1133779","ufSelection":"6210","quantite":"1","dateMouvement":"19\/09\/2017","montantHT":"3,05","montantTTC":"3,2635","montantT2A":"0","numMVT":"1034988"},"2":{"codeProduit":"1615","prnom":"produit2","reference":"2330731","ufSelection":"6045","quantite":"50","dateMouvement":"20\/09\/2017","montantHT":"9","montantTTC":"9,45","montantT2A":"0","numMVT":"1036114"},"3":{"codeProduit":"3897","prnom":"produit20","reference":"6003376","ufSelection":"6045","quantite":"7","dateMouvement":"20\/09\/2017","montantHT":"17,57","montantTTC":"18,7999","montantT2A":"0","numMVT":"1035988"},"4":{"codeProduit":"6270","prnom":"produit18","reference":"9032582","ufSelection":"6011","quantite":"1","dateMouvement":"21\/09\/2017","montantHT":"289,23","montantTTC":"309,4761","montantT2A":"301,171","numMVT":"1036352"},"5":{"codeProduit":"6270","prnom":"produit4","reference":"9032582","ufSelection":"6011","quantite":"1","dateMouvement":"21\/09\/2017","montantHT":"289,23","montantTTC":"309,4761","montantT2A":"301,171","numMVT":"1036353"},"6":{"codeProduit":"14","prnom":"produit6","reference":"1120154","ufSelection":"6132","quantite":"17","dateMouvement":"22\/09\/2017","montantHT":"1,5946","montantTTC":"1,706222","montantT2A":"0","numMVT":"1036760"},"7":{"codeProduit":"89","prnom":"produit8","reference":"1160250","ufSelection":"8282","quantite":"4","dateMouvement":"22\/09\/2017","montantHT":",49","montantTTC":",5243","montantT2A":"0","numMVT":"1037260"},"8":{"codeProduit":"5994","prnom":"produit1","reference":"9031105","ufSelection":"6050","quantite":"10","dateMouvement":"22\/09\/2017","montantHT":"2,284","montantTTC":"2,44388","montantT2A":"0","numMVT":"1037053"}}}"
]
Modérateur
Dans tous les fichiers JSON que vous avez montrés (palouf & loicbcn) il n'y a AUCUN array, mais que des objets. en JSON les arrays peuvent se définir ainsi:


produits: [
  {
    "codeProduit": "398"
    "dateMouvement":"19/09/2017"
  },
  {
    "codeProduit": "398"
    "dateMouvement":"19/09/2017"
  }
]

ou ainsi:

produits:
  - "codeProduit": "398"
     "dateMouvement":"19/09/2017"
  - "codeProduit": "398"
     "dateMouvement":"19/09/2017"


donc length retourne undefined ce qui normal car Object ne contient pas cet attribut.

$array1 et $array2 ne sont pas des array en JSON ni en javascript. C'est sans doute parce que ce sont des tableaux associatifs et ceux-ci deviennent des objets.
@kustolovic, merci, mais tu te fourvoies.
Bonjour,
J'ai repris la notation adoptée par palouf34 ... Ecrire:
data:
  0 : "hello",
  1 : "kitty",
  ...
  1000 : "como estas"


c'est à dire, un array javascript avec des clefs allant de 0 à n, revient à écrire:
data:["hello","kitty", ... "como estas"];
, il s'agit donc bien d'un array.

@palouf34: voici la réponse json que tu reçois remise en forme (je n'ai pas bien compris le crochet fermant à la fin):
"data": {
    "codeProduit": "",
    "prnom": "",
    "reference": "",
    "ufSelection": "",
    "quantite": "",
    "dateMouvement": "",
    "montantHT": "",
    "montantTTC": "",
    "montantT2A": "",
    "numMVT": "",
    "messageError": "",
    "resultat": "",
    "0": {
        "codeProduit": "6144",
        "prnom": "produit72",
        "reference": "9031820",
        "ufSelection": "6045",
        "quantite": "1",
        "dateMouvement": "18\/09\/2017",
        "montantHT": "1,83",
        "montantTTC": "1,9581",
        "montantT2A": "0",
        "numMVT": "1037771"
    },
    "1": {
        "codeProduit": "398",
        "prnom": "produit25",
        "reference": "1133779",
        "ufSelection": "6210",
        "quantite": "1",
        "dateMouvement": "19\/09\/2017",
        "montantHT": "3,05",
        "montantTTC": "3,2635",
        "montantT2A": "0",
        "numMVT": "1034988"
    },
...
}
.
Ce n'est pas un array, car la structure est hétérogène (les clefs sont 0, 1, ... "codeProduit" etc...), c'est pourquoi je t'ai conseillé d'insérer un tableau dans la réponse data, ce qui donnerait:

"data": {
    "codeProduit": "",
    "prnom": "",
    "prods":
           0 : {
                "codeProduit": "6144",
                "prnom": "produit72",
                ....
            },
            1 : {
                "codeProduit": "398",
                "prnom": "produit25",
                ...
            },
...
}
Ici, data["prods"] est un array, dont on peut connaître la longueur.
Modifié par loicbcn (26 Sep 2017 - 09:59)
Meilleure solution
Bonjour,

Merci pour votre aide précieuse, cela m'a permis de voir que j'avais initialisé incorrectement mon tableau data ce qui m’empêchait ensuite d'en connaitre la longueur.

maintenant il me reste une erreur a voir mais qui concerne la quantité de donnée retourné. Mais ceci est un autre problème.

Merci beaucoup.
Modifié par palouf34 (26 Sep 2017 - 13:57)