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

JavaScript Discussion :

récupération des données json


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    IMS
    IMS est déconnecté
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 35
    Par défaut récupération des données json
    Bonjour,

    J'essaie de récupérer des données dans une fonction javascript afin de mettre à jour des états sur une page html (donc une petite requête AJAX en utilisant la lib prototype). Côté serveur c'est un cgi (écrit en c) qui doit se charger de retourner les données.
    Voulant bien faire j'essaie d'utiliser JSON mais pas moyen de récupérer les données (json vaut null dans la fonction onSuccess).

    Si j'exécute la requête directement (obtenue via firebug) j'obtiens bien les données recherchées dans un fichier proposé en téléchargement

    => ci dessous les quelques lignes de mon test et le fichier de donnée que j'obtiens, si quelqu'un peut m'éclairer !

    Côté client, l'appel javascript :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    /* Méthode permettant d'ajouter des scripts dans le head de la page */
    int states_addScriptsToHead(t_infos_page* infos_page)
    {
    	printf("<script type=\"text/javascript\" src=\"/scripts/prototype/prototype-1.6.0.3.js\"></script>\n");
     
    	printf("<script type=\"text/javascript\" language=\"javascript\">\n");
     
    	printf("<!-- Méthode appelée pour raffraichir les états -->\n");
    	printf( "function onRefresh() { \n "
    			"	new Ajax.Request('%s', \
    				{ \
    				  method: 'get', \
    				  parameters: {lang:'%s', affichage:%d, onglet:%d, gid:%d, msg:0, step:%d, mode:%d}, \
    				  onSuccess: function(transport, json) { \
    							alert('Succès ! json : ' + json.id01); \
    							 }, \
    				  onFailure: function() { alert('Error ?!'); }, \
    				} \
    				);\n"
    			"} \n", infos_page->sUrlBase, infos_page->lang, infos_page->iModeAffichage, infos_page->iNoOnglet, infos_page->gid, infos_page->iStep, MODE_AJAX_REQUEST);
     
    	printf("</script>\n");
     
    	return NO_ERROR;
    }
    Côté serveur, la génération des données (j'utilise la librairie cJSON) :
    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
    17
    18
    19
    20
    21
    22
    23
     
    /* Méthode appelée pour les requêtes ajax */
    int states_ajax_request(t_infos_page* infos_page)
    {
    	cJSON *root;
    	char *out;
     
    	root = cJSON_CreateObject();
    	cJSON_AddItemToObject(root, "id01", cJSON_CreateNumber(0));
    	cJSON_AddItemToObject(root, "id02", cJSON_CreateNumber(0));
    	cJSON_AddItemToObject(root, "id03", cJSON_CreateNumber(1));
    	cJSON_AddItemToObject(root, "id04", cJSON_CreateNumber(1));
    	cJSON_AddItemToObject(root, "id05", cJSON_CreateNumber(0));
     
    	out = cJSON_Print(root);
     
    	fprintf(stdout, "Content-type: application/json ; charset=%s\n\n", CHARSET_DEFAULT);
    	fprintf(stdout, "%s\n", out);
     
    	cJSON_Delete(root);
    	free(out);
    	return 0;
    }
    Le résultat de la requête comme quoi je ne doit pas être très loin du résultat mais je ne vois pas pourquoi je n'ai rien dans l'objet json !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
    	"id01":	0,
    	"id02":	0,
    	"id03":	1,
    	"id04":	1,
    	"id05":	0
    }

  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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    parcequ'en retourn d'ajax tu n'as que du string ...
    il faut evaluer le stringjson avec eval de sorte qu'il devienne un objet 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 !

  3. #3
    IMS
    IMS est déconnecté
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 35
    Par défaut
    Ok, merci de ta réponse.
    J'ai essayé d'ajouter çà sans succès...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     onSuccess: function(transport, json) { \
                            if(json == null)\
    			    alert('json vaut null !!!');\
     
    			var response = eval('json');\ // var response = eval('(' + json + ')'); comme indiqué sur le site de json mais pas de différences
    			alert('Succès ! json : ' + response.id01); \
    		 }, \
    Par ailleurs j'ai vérifié et le paramètre json de ma fonction vaut null !
    Pourtant mon Content-type vaut application/json donc çà ne devrait pas, une idée ?

  4. #4
    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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    oui ^^ la sytaxe d'eval d'un json est un pau particulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var response = eval('('+json+')');
    et là reponse sera un objet json pour autant que le string json soit bien formaté
    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 !

  5. #5
    IMS
    IMS est déconnecté
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 35
    Par défaut
    J'ai trouvé ce lien sur le net (http://groups.google.com/group/proto...d98bc1b4f45fdd qui tendrait à expliquer pourquoi json peut valoir null...

    Il semblerait qu'il faille utiliser transport.responseJSON lorsqu'on renvoie les données dans le corps de la réponse comme c'est à priori mon cas. Le problème c'est que même comme cela çà ne fonctionne toujours pas car transport.responseJSON vaut null également. Est il possible de tracer le contenu de transport qui n'est pas null pour connaitre son contenu ?

  6. #6
    IMS
    IMS est déconnecté
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 35
    Par défaut
    A partir du lien suivant http://stackoverflow.com/questions/8...-request-scope j'ai enfin réussi à récupérer mes données !!!

    En fait mon problème venait du fait que je n'avais pas défini le paramètre asynchronous à false

    Ce que je ne comprends pas : je pensais que les fonctions callback (du type onSuccess) étaient appelées lorsque les requêtes serveurs étaient finies d'être exécutées or il semble qu'elles soient appelées dès la fin des appels. Une explication ? comment récupère t on les données dans le cas d'une requête asynchrone ?

    Mon code qui fonctionne à titre d'exemple :
    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
    17
    18
     
    printf( "function onRefresh() { \n "
    	"	new Ajax.Request('%s', \
    		{ \
    		  method: 'get', \
    		  asynchronous: false, \
    		  contentType:'application/json', \
    		  parameters: {lang:'%s', affichage:%d, onglet:%d, gid:%d, msg:0, step:%d, mode:%d}, \
    		  onSuccess: function(transport) { \
    					if(transport.responseText == null) \
    						alert('transport.responseText == null'); \
    					var response = transport.responseText.evalJSON(true);\
    					alert('response id03 : ' + response.id03); \
    					}, \
    		  onFailure: function() { alert('Error ?!'); }, \
    		} \
    		);\n"
    	"} \n", infos_page->sUrlBase, infos_page->lang, infos_page->iModeAffichage, infos_page->iNoOnglet, infos_page->gid, infos_page->iStep, MODE_AJAX_REQUEST);

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

Discussions similaires

  1. [AJAX] Erreur lors de récupération des données en Json
    Par goku19 dans le forum jQuery
    Réponses: 3
    Dernier message: 19/04/2014, 14h40
  2. [Dojo] Erreur lors de la récupération des données JSON
    Par benoxy dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 21/05/2010, 18h12
  3. [HTML][FORMULAIRE] Probleme dans la récupération des données
    Par baddounet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/08/2005, 18h51
  4. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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