Récupération infos XML pour les mettre dans un dojo Datagrid [Résolu]

Signaler
Messages postés
63
Date d'inscription
vendredi 5 novembre 2004
Statut
Membre
Dernière intervention
26 novembre 2012
-
Messages postés
63
Date d'inscription
vendredi 5 novembre 2004
Statut
Membre
Dernière intervention
26 novembre 2012
-
Bonjour à tous,

Je souhaite mettre dans un dojo Datagrid des données venant d'un fichier XML via une requête Ajax. J'ai pour çà fait fait un fichier PHP qui m'encode les données XML en JSON. J'obtiens ceci :
{
"vehicule":
[
 	{"numero":"006680","marque":"Renault","modele":"Laguna","immatriculation":"1231 FF 69","date_immat":null},
 	{"numero":"000066","marque":"Daewoo","modele":"Lanos SE GPL","immatriculation":"9999 ZZ 99","date_immat":"1999-11-01"},
 	{"numero":"000180","marque":"Daewoo","modele":"Lanos SE GPL","immatriculation":"7777 XX 99","date_immat":"1999-10-01"},
 	{"numero":"001250","marque":"Renault","modele":"Clio","immatriculation":"8897 BG 62","date_immat":"2006-11-01"},
 	{"numero":"000280","marque":"Daewoo","modele":"Lanos SE GPL","immatriculation":"8888 XX 99","date_immat":"2000-10-01"},
 	{"numero":"0045877","marque":"Renault","modele":"Twingo","immatriculation":"9780 HH 66","date_immat":"2005-11-01"},
 	{"numero":"0410208","marque":"Renault","modele":"Megane","immatriculation":"9978 PP 59","date_immat":"2005-11-01"}
 ]
} 


Cette donnée est ensuite mise dans un store, puis je crée mon Datagrid. Voici mon code javascript avec la requête ajax, store et datagrid :
dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.data.ItemFileReadStore");

dojo.ready(function(){

var targetNode = dojo.byId("grid.debug");

var xhrArgs = {
url: "../json/index.php",
handleAs: "json",
load: function(data, ioArgs){

//data = {"vehicule":[{"numero":"006680","marque":"Renault","modele":"Laguna","immatriculation":"1231 FF 69","date_immat":null},{"numero":"000066","marque":"Daewoo","modele":"Lanos SE GPL","immatriculation":"9999 ZZ 99","date_immat":"1999-11-01"},{"numero":"000180","marque":"Daewoo","modele":"Lanos SE GPL","immatriculation":"7777 XX 99","date_immat":"1999-10-01"},{"numero":"001250","marque":"Renault","modele":"Clio","immatriculation":"8897 BG 62","date_immat":"2006-11-01"},{"numero":"000280","marque":"Daewoo","modele":"Lanos SE GPL","immatriculation":"8888 XX 99","date_immat":"2000-10-01"},{"numero":"0045877","marque":"Renault","modele":"Twingo","immatriculation":"9780 HH 66","date_immat":"2005-11-01"},{"numero":"0410208","marque":"Renault","modele":"Megane","immatriculation":"9978 PP 59","date_immat":"2005-11-01"}]};

var data2 = data['vehicule'];

    	var dataStore = new dojo.data.ItemFileReadStore({data: { identifier: "numero", label: "marque", items: data2}});
var gridStructure = [
                   [
                     { field: "numero", 	 	 name: "Numéro", 			width: 5,  },
                     { field: "marque", 	 	 name: "Marque", 			width: 5,  },
                     { field: "modele",  		 name: "Modèle", 			width: 10, },
                     { field: "immatriculation", name: "Immatriculation", 	width: 15, },
                     { field: "date_immat", 	 name: "Date immat", 		width: 10, }
                   ]
                 ];

console.log(data);
console.log(dataStore);
console.log(data2);		                 

var grid = new dojox.grid.DataGrid({
id: "grid",
jsid: "grid",
store: dataStore,
structure: gridStructure,
style: 'width:761px;height:300px;'
}, dojo.byId("grid.DataGrid"));

grid.startup(); 
    },
    error: function(error){
        targetNode.innerHTML = "An unexpected error occurred: " + error;
    }
};

var deferred = dojo.xhrGet(xhrArgs);
});


J'utilise dojo via le CDN. Le hic c'est que dans ma données json, j'ai le nom du tableau d'objet { "vehicule": qui apparait et qui à l'air de me bloquer le datagrid.

Comment faire pour que cette donnée soit :
- Eliminer lors du json_encode PHP
- Eliminer côté javascript
- Pris en compte dans le store sans que cela empêche mon datagrid de se remplir.

Merci d'avance.


Kcin

1 réponse

Messages postés
63
Date d'inscription
vendredi 5 novembre 2004
Statut
Membre
Dernière intervention
26 novembre 2012

J'ai finalement opté pour un traitement côté PHP. Vu que la source XML est récupérée à ce niveau. Je parcours mon tableau simpleXML, et çà me permet d'enlever le nom du tableau.

Sinon, tout semble fonctionner, j'ai apporté quelques modifications au code javascript. J'avais mis un identifier et un label pour le dataStore, et apparemment cela me posait soucis. Pourquoi, bonne question... Va falloir que je me penche la-dessus.

<script>dojoConfig = {parseOnLoad: true}</script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js"></script>
<script>
dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.data.ItemFileReadStore");

dojo.ready(function(){

var targetNode = dojo.byId("grid.debug");

var xhrArgs = {
url: "../json/index.php",
handleAs: "json",
load: function(data, ioArgs){

    	var dataStore = new dojo.data.ItemFileReadStore({data: { items: data}});
var gridStructure = [
                   [
                     { field: "numero", 	 	 name: "Numéro", 			width: 5,  },
                     { field: "marque", 	 	 name: "Marque", 			width: 5,  },
                     { field: "modele",  		 name: "Modèle", 			width: 10, },
                     { field: "immatriculation", name: "Immatriculation", 	width: 15, },
                     { field: "date_immat", 	 name: "Date immat", 		width: 10, }
                   ]
                 ];		                 

var grid = new dojox.grid.DataGrid({
id: "grid",
jsid: "grid",
store: dataStore,
structure: gridStructure,
style: 'width:761px;height:300px;'
}, dojo.byId("grid.DataGrid"));

grid.startup(); 
    },
    error: function(error){
        targetNode.innerHTML = "An unexpected error occurred: " + error;
    }
};

var deferred = dojo.xhrGet(xhrArgs);
});
</script>



Kcin