Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Ext JS / Sencha
Ext JS / Sencha Ext JS / Sencha Forum d'entraide sur les frameworks Ext JS et Sencha. Avant de poster : FAQ ExtJS / Sencha, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2011, 16h44   #1
Invité de passage
 
Inscription : mai 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 5
Points : 1
Points : 1
Par défaut extjs - json récupérer variables

Bonjour,
Je débute et j'ai un souci avec EXTJS. Je n'arrive pas à récupérer les valeurs d'un json dans des variables.

voici à quoi ressemble mon json:
Code :
1
2
 
"info:[{"0":"Micheal","prenom":"Micheal","1":"Dubois","nom":"Dubois","2":"21","age":"21"}]
Voici mon store:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
var infostore = new Ext.data.JsonStore({
        url: 'connectpostgres.php',
	root:'info',
	id:'info' ,
 
	fields: [ 
 
			{name:'prenom'} 
			,{name:'nom'} 			
			,{name:'age'} 
 
		]
});
  infostore.load();

Mais maintenant je voudrais afficher dans un panel ces résultats: (pas de grid)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
var resultats= new Ext.FormPanel({
        labelWidth: 50, 
        frame:true,
        bodyStyle:'padding:5px 5px 0',
        width: 230,
        items: 
	    [{
	      xtype: 'label',  
              fieldLabel: 'prénom', 
              text:  ?????              
	    },{
	       .....
Voila je ne sais pas comment attribuer la valeur de 'prénom' à text???

D'avance merci de votre aide .
john316 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 13h18   #2
Membre confirmé
 
Homme
Étudiant
Inscription : mai 2007
Messages : 249
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 249
Points : 240
Points : 240
Bonjour,

Avant tout je ne pense pas que ton Json soit correct.
Pour tester la validité de ton Json va sur ce site :
http://jsonlint.com/

Pour éviter de construire le Json à la main, utilise json_encode() en php ^^

Pour attribuer la valeur à ton champ, il faut faire un load() mais sur le formulaire
Tu n'a pas besoin de ton jsonStore

Code :
1
2
3
4
5
6
7
8
9
10
11
12
var resultats= new Ext.FormPanel({
        labelWidth: 50, 
        frame:true,
        bodyStyle:'padding:5px 5px 0',
        width: 230,
        items: 
	    [{
	      xtype: 'textfield',  
              fieldLabel: 'prénom', 
              name: 'fieldPrenom'              
	    },{
	       .....
Ensuite il te reste à faire un :
Code :
1
2
3
resultats.load({
    url: 'connectpostgres.php'
});
Le Json que tu devra retourné sera composé comme ceci:
Code :
{"success": true, "data":{"fieldPrenom": "la_valeur_que _je_veux_afficher", .....}}
Le 'success' et le 'data' étant obligatoire si tu veux que le load() remplisse le formulaire
abraxis est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/05/2011, 15h57   #3
Invité de passage
 
Inscription : mai 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 5
Points : 1
Points : 1
Un grand merci à toi abraxis

Effectivement c'est bien plus simple comme ça et surtout ça fonctionne

A la prochaine
john316 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2011, 14h15   #4
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
ton json me fait penser que tu utilise mysql sur ton serveur

regarde les option de fetch celle que tu utilise remonte deux fois les données
une fois par son numéro de colonne une fois avec le nom de colonne.

il est bien plus simple et pratique de n'utiliser que les nom
ainsi tu simple json_encode donne le bon résultat

mais il y a encore mieux à faire
c'est de faire un fetch (avec les noms)
de construire un array pour la réponse
si la requête à fonctionner faire
Code php :
1
2
$response = Array('success' => true,
'data' => $sqlResultArray);
et si la requête à échoué
Code php :
1
2
$response = Array('success' => false,
'error' => "cause de l'erreur');

ensuite il sufit de faire un
Code php :
echo (utf8_encode(json_encode($result)));

en agissant ainsi de façon systématique tu peux très facilement ajouter les champs nécessaire à la pagination le traitement de erreurs etc.

je me suis fais une méthode qui le fait pour moi
du coup mes contrôleurs php ne font que définir un tableau réponse
deux exemples: pour un formulaire
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    function editAction() {
        $contactId = $this->_request->get('id');
        $isAdd = $this->_getParam('isAdd', false);
 
        if ($this->_request->isPost()) {
            $post = array_map('utf8_decode', $this->_request->getPost());
 
            $datas=array (
                'ctct_name'      => htmlspecialchars($post['contact_name'], ENT_QUOTES),
                'ctct_firstname' => htmlspecialchars($post['contact_firstname'], ENT_QUOTES),
                'ctct_mail'      => htmlspecialchars($post['contact_mail'], ENT_QUOTES),
                'ctct_phone'     => ereg_replace("([0-9]{1}).([0-9]{2}).([0-9]{2}).([0-9]{2}).([0-9]{2})", "\\1\\2\\3\\4\\5", $post['contact_phone']),
                'ctct_genre'     => (int)$post['contact_genre'],
                'grp_id'         => (int)$post['contact_group']
            );
            if (!$isAdd) {
                $res = $this->model->updateContact($contactId, $datas);
            } else {
                $res = $this->model->insertContact($datas);
            }
            #Fast_Debug::show($isAdd, $res);
 
            if (!$res->success) {
                $res->error = UNAVALABLE;
            }
            $this->response = $res;
        } else {
            if (!$isAdd) {
                $data = $this->model->getContactById($contactId);
                if (isset($data->contact_phone)) {
                    $data->contact_phone = ereg_replace("([0-9]{1})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})", "0\\1 \\2 \\3 \\4 \\5", $data->contact_phone);
                } else {
                    $data->contact_phone = null;
                }
            } else {
                $data = null;
            }
 
            if ($data) {
                $this->_setListResponse(array($data));
            } else {
                $this->_setListResponse(null);
            }
        }
    }
ou pour un grid :
Code php :
1
2
3
4
5
    public function getlistAction()
    {
        $data = $this->model->getGroupList();
        $this->_setListResponse($data);
    }

ma méthode _setListResponse est for simple
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    protected function _setListResponse($data, $count = null) {
        if (is_array($data) || null != $count) {
            if (null == $count) {
                $count = count($data);
            }
            $this->response = array(
                'success' => true,
                'results' =>$count,
                'count' =>count($data),
                'rows'=> $data
            );
        } else {
            $this->response = array(
                'success' => false,
                'error' => RES_EMPTY,
                'results' =>0,
                'count' =>0,
                'rows'=> null
            );
        }
    }
A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h20.


 
 
 
 
Partenaires

Hébergement Web