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 :

Erreur pour parser une requête en JSON


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Erreur pour parser une requête en JSON
    Bonjour,
    Depuis deux jours je galère avec un même problème. Je fais une requête en Ajax qui est traitée par un serveur web sur une carte Arduino. Jusqu'alors toutes les requêtes fonctionnent mais je souhaite désormais répondre à une nouvelle requête par une chaîne JSON. Vous trouverez ci-dessous les extraits de code plus bas. Le problème est que dans le code JS, xhttp.responseText montre un contenu parfaitement cohérent avec ce que j'attends aussi bien si je fais un : console.log(xhttp.responseText) ou en affichant le contenu de la variable dans une balise AREA.
    Pourtant l'instruction : JSON.parse(json) ci-dessous ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function AfficheDataTelechargee(xhttp) {
    	document.getElementById('story').value=xhttp.responseText;	//copie du résultat dans un AREA
    	console.log(xhttp.responseText); //pour voir le résultat dans la console
    	var json=xhttp.responseText;
    	//const json = '{"donnee":[{"date":"00:00:18","temp":26.2},{"date":"00:00:54","temp":26.2}...]}'; //chaîne provenant le la console
    	var obj = JSON.parse(json);
    	console.log(obj); //pour voir l'objet
    }
    ... provoque systématiquement l'erreur :
    VM198:1 Uncaught SyntaxError: Unexpected token ' in JSON at position 0
    at JSON.parse (<anonymous>)
    at AfficheDataTelechargee (index.js:128)
    at XMLHttpRequest.Ajaxrequete.xhttp.onreadystatechange (index.js:93)
    Le comble est que si je fait un copié/collé de ce qui est affiché dans la console et que je le mets dans ma fonction ci-dessus (cf ligne de commentaire que j'ai raccourcie), tout va bien. Il y a donc une différence que je ne vois pas entre le contenu de xhttp.responseText et son contenu que je peux copié/collé dans le code. Auriez vous une piste qui pourrait m'aider ? Un grand merci d'avance.

    Cordialement
    Michel

    PS : A tout hasard, voici la fonction qui provoque la requête (les commentaires résultent de tous les essais que j'ai pu faire) :
    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
    function Ajaxrequete(url, cFunction) {
    	var xhttp=new XMLHttpRequest();
    	if (url==document.getElementById('IPserveur').value+'/?partiecsv') {
    		//xhttp.overrideMimeType("application/json");
    		//xhttp.responseType = 'json';
    	}
    	xhttp.onreadystatechange = function() {
    		if (this.readyState == 4 && this.status == 200) {		
    			cFunction(this);
    		}
    	};
    	xhttp.open("GET", url, true);
    	//xhttp.responseType = 'text';
    	xhttp.send();
    }

  2. #2
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    on ne peut pas utiliser un fetch sur un arduino? ce serai quand même plus simple, non ??
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    Je ne savais pas ce qu'était un fetch sur un arduino ... je viens de regarder ..., c'est possible effectivement mais comme je veux aussi comprendre ce qui cloche, je vais continuer les recherches en espérant que quelqu'un puisse me donner un coup de pouce car je commence à fatiguer ...

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    ça va être dur parce ton code ne montre pas quand est appelé la fonction Ajaxrequetevu d'ici ça ressemble à un puzzle auquel il manque des pieces
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #5
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Pas de problème, je n'ai pas voulu noyer le lecteur, voici ma fonction (je précise que les commentaires correspondent aux multiples essais déjà réalisés mais qui n'ont pas eu d'impact positif et je précise aussi que plusieurs requêtes ont lieu et ne posent aucun souci, c'est seulement après avoir voulu m'initier à Json ):

    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
     
    function Ajaxrequete(url, cFunction) {
    	var xhttp=new XMLHttpRequest();
    	if (url==document.getElementById('IPserveur').value+'/?partiecsv') {
    		//xhttp.overrideMimeType("application/json");  
    		//xhttp.responseType = 'json';
    	}
    	xhttp.onreadystatechange = function() {
    		if (this.readyState == 4 && this.status == 200) {		
    			cFunction(this);
    		}
    	};
    	xhttp.open("GET", url, true);
    	//xhttp.responseType = 'text';
    	xhttp.send();
    }
    est-ce que le message "Unexpected token ' in JSON at position 0" signifie que le problème provient du caractère ' en position 0 ?
    Les chaînes JSON sont bien contenues entre deux simples quotes ?
    La mienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '{"donnee":[{"date":"00:00:18","temp":26.2},{"date":"00:00:54","temp":26.2},....,{"date":"23:59:59","temp":0}] }';

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    Citation Envoyé par Arduinophil Voir le message
    Pas de problème, je n'ai pas voulu noyer le lecteur, voici ma fonction :
    function Ajaxrequete(url, cFunction) ....
    heu j'ai pas demandé à re-voir le code de la fonction `Ajaxrequete` mais quand ( et comment] elle est appelée.

    j'imagine qu'il y a un lien avec `AfficheDataTelechargee` mais pour l'instant ça ressemble toujours à 2 pieces de puzzle séparées
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  7. #7
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Salut,

    Citation Envoyé par Arduinophil Voir le message
    est-ce que le message "Unexpected token ' in JSON at position 0" signifie que le problème provient du caractère ' en position 0 ?
    Apparemment oui...

    Citation Envoyé par Arduinophil Voir le message
    Les chaînes JSON sont bien contenues entre deux simples quotes ?
    La mienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '{"donnee":[{"date":"00:00:18","temp":26.2},{"date":"00:00:54","temp":26.2},....,{"date":"23:59:59","temp":0}]  }';
    Est-ce que lorsque tu fais document.getElementById('story').value=xhttp.responseText; //copie du résultat dans un AREA ces deux simples quottes s'affichent ?

    Si oui alors c'est normal que cela provoque l’erreur en question ---> les deux simples quottes sont de trop......

    ---> Attention à un piège : si tu fais ceci : var json = '{"donnee":[{"date":"00:00:18","temp":26.2},{"date":"00:00:54","temp":26.2},{"date":"23:59:59","temp":0}]}';...

    Puis que tu affiches la variable json dans une textarea ou dans la console eh bien les deux simples quotes ne s’affichent pas car elles ne font pas partie de la chaine...
    Du coup si tu parses (JSON.parse(json);) c'est ok...

    Ce n'est pas pareil que lorsque tu fais : var json=xhttp.responseText; car là tu affectes à 'json' une chaine contenant les deux simples quottes (il en est ainsi à condition que la réponse à ma première question ci-dessus soit oui ce qui semble être le cas d’après l'erreur) ...

    Du coup si tu parses (JSON.parse(json);) cela provoque l'erreur en question...

    Je te signale cela pour répondre à certains commentaires que tu as mis dans ton code...


    -------> Un code qui montre les deux cas (un qui marche et l'autre qui produit l’erreur en question) : https://jsbin.com/gumuhicaru/edit?js,console,output

  8. #8
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Super, c'était bien ce problème de quotes, le fait de les avoir artificiellement ajouté aux extrémités de ma chaîne dès l'envoi de la chaine JSON sur la carte arduino était tout simplement le poblème (j'étais parti d'un exemple trouvé sur internet où ils étaient présents, j'aurai du me méfier.

    Merci de ton regard extérieur, Beginner, (surtout en répondant à 4h43 ...)

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

Discussions similaires

  1. Parser une requête SQL pour MySQL
    Par gassla dans le forum SGBD
    Réponses: 3
    Dernier message: 02/08/2006, 15h36
  2. problème pour faire une requête
    Par mitchbuck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/11/2005, 22h48
  3. [MySQL] Afficher le temps mis pour executer une requête SQL
    Par micatmidog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/09/2005, 11h23
  4. Réponses: 7
    Dernier message: 03/06/2004, 12h46
  5. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

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