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

Langage PHP Discussion :

SyntaxError: JSON.parse: unexpected character at line


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut SyntaxError: JSON.parse: unexpected character at line
    Bonsoir,

    Dans un script, je crée un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let act = document.getElementsByClassName('activite');
      let com = document.getElementsByClassName('comment');
      for (let i = 0; i < items.length; i++) {
        let tabBdd = {
          'annee' : i,
          'activite' : act[i].textContent,
          'comment' : com[i].textContent
        }
      tableauBdd.push(tabBdd);}
    Puis le converti en json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let tabJson = JSON.stringify(tableauBdd);
    Un "console.log(tabJson)" => ok

    Je le passe à un fichier php (pour enregistrer dans la bdd)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $.ajax({
      url : 'ecrireBdd.php',
      type : 'POST', 
      dataType : 'json',
      data : tabJson,
      success : function(resultat, statut) {
        alert('Données enregistrées');},
      error : function(resultat, statut, erreur) {
        alert("Erreur !!!! " + erreur);}
    });
    Dans mon fichier PHP

    - Je mets en en-tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-type: application/json; charset=UTF-8');
    - Dans ma requête, je récupère bien un fichier JSONNom : img01.png
Affichages : 436
Taille : 2,6 Ko

    - Mon fichier json récupéré
    [{"annee":0,"activite":"Activite principale","comment":"Commentaires"},{"annee":1,"activite":"?","comment":""},{"annee":2,"activite":"?","comment":""},{"annee":3,"activite":"?","comment":""},{"annee":4,"activite":"?","comment":""},{"annee":5,"activite":"?","comment":""},{"annee":6,"activite":"?","comment":""},{"annee":7,"activite":"?","comment":""},{"annee":8,"activite":"?","comment":""},{"annee":9,"activite":"?","comment":""},{"annee":10,"activite":"?","comment":""},{"annee":11,"activite":"?","comment":""},{"annee":12,"activite":"?","comment":""},{"annee":13,"activite":"?","comment":""},{"annee":14,"activite":"?","comment":""},{"annee":15,"activite":"?","comment":""},{"annee":16,"activite":"Jeux olympiques","comment":"Lancer parpaings"},{"annee":17,"activite":"Tyrolienne","comment":""},{"annee":18,"activite":"Kermesse","comment":""},{"annee":19,"activite":"Puy du Fou","comment":""},{"annee":20,"activite":"Pac Man","comment":""},{"annee":21,"activite":"Baby foot","comment":""},{"annee":22,"activite":"Jeu de piste","comment":"René la taupe"},{"annee":23,"activite":"Fusée à eau","comment":""},{"annee":24,"activite":"Tir à l'arc","comment":""},{"annee":25,"activite":"Voiture F1","comment":""},{"annee":26,"activite":"Guiness Irlande","comment":""},{"annee":27,"activite":"Fort Boyard","comment":"Pisse partout"},{"annee":28,"activite":"COVID ?","comment":""},{"annee":29,"activite":"Avion papier ?","comment":""},{"annee":30,"activite":"Chevaux ?","comment":""},{"annee":31,"activite":"?","comment":"Mamadou"},{"annee":32,"activite":"?","comment":""},{"annee":33,"activite":"Koh lanouta","comment":""},{"annee":34,"activite":"Pokémon go","comment":""},{"annee":35,"activite":"Soirée créole","comment":"Musique Issue de secours"},{"annee":36,"activite":"Harry Potter","comment":"Quidditch"},{"annee":37,"activite":"Soirée créole","comment":"Combat coq"},{"annee":38,"activite":"Cluedo","comment":""},{"annee":0,"activite":"Activite principale","comment":"Commentaires"},{"annee":1,"activite":"?","comment":""},{"annee":2,"activite":"?","comment":""},{"annee":3,"activite":"?","comment":""},{"annee":4,"activite":"?","comment":""},{"annee":5,"activite":"?","comment":""},{"annee":6,"activite":"?","comment":""},{"annee":7,"activite":"?","comment":""},{"annee":8,"activite":"?","comment":""},{"annee":9,"activite":"?","comment":""},{"annee":10,"activite":"?","comment":""},{"annee":11,"activite":"?","comment":""},{"annee":12,"activite":"?","comment":""},{"annee":13,"activite":"?","comment":""},{"annee":14,"activite":"?","comment":""},{"annee":15,"activite":"?","comment":""},{"annee":16,"activite":"Jeux olympiques","comment":"Lancer parpaings"},{"annee":17,"activite":"Tyrolienne","comment":""},{"annee":18,"activite":"Kermesse","comment":""},{"annee":19,"activite":"Puy du Fou","comment":""},{"annee":20,"activite":"Pac Man","comment":""},{"annee":21,"activite":"Baby foot","comment":""},{"annee":22,"activite":"Jeu de piste","comment":"René la taupe"},{"annee":23,"activite":"Fusée à eau","comment":""},{"annee":24,"activite":"Tir à l'arc","comment":""},{"annee":25,"activite":"Voiture F1","comment":""},{"annee":26,"activite":"Guiness Irlande","comment":""},{"annee":27,"activite":"Fort Boyard","comment":"Pisse partout"},{"annee":28,"activite":"COVID ?","comment":""},{"annee":29,"activite":"Avion papier ?","comment":""},{"annee":30,"activite":"Chevaux ?","comment":""},{"annee":31,"activite":"?","comment":"Mamadou"},{"annee":32,"activite":"?","comment":""},{"annee":33,"activite":"Koh lanouta","comment":""},{"annee":34,"activite":"Pokémon go","comment":""},{"annee":35,"activite":"Soirée créole","comment":"Musique Issue de secours"},{"annee":36,"activite":"Harry Potter","comment":"Quidditch"},{"annee":37,"activite":"Soirée créole","comment":"Combat coq"},{"annee":38,"activite":"Cluedo","comment":""}]
    est validé par https://jsonlint.com/

    Mais, dès que je veux l'utiliser dans le php, j'ai la réponse :
    SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data
    Je suis en test sous Wampserver 3.3.1 sous W11 et PHP 8.2.3.
    J'ai testé avec PHP 7.4.9 => idem

    J'ai vidé le cache du navigateur => idem

    Je ne sais plus quoi faire.

    Je vous remercie pour les éléments de réponse que vous pourrez m'apporter...

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 520
    Par défaut
    Bonjour,

    L'objet envoyé par ajax est convertit en chaine de caractère avec let tabJson = JSON.stringify(tableauBdd);, et donc vous devriez le reconvertir en tableau au niveau PHP avec json_decode();
    Comment tu utilises l'objet JSON dans le fichier PHP ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    Bonjour et merci,

    Dans mon .php, normalement je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (isset($_POST['tabJson'])) {
      $tabBdd = json_decode($_POST['tabJson']);}
    et la suite du traitement.

    Et c'est à ce moment là que j'ai une erreur.

    Je teste avec Firebug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      fb('debut');
      if (isset($_POST['tabJson'])) {
        $tabBdd = json_decode($_POST['tabJson']);
        fb('ok');
      } else {
        fb('ko');
      }
      fb('fin');
    J'ai "ko".

    Je viens de tester sans rien dans mon .php, juste <?php php> et j'ai l'erreur...

    Nb : dans la surveillance réseau, j'ai bien les données de formulaire correspondant à mes données mais le type est "html"
    Si je rajoute en en-tête du .php (comme je fais habituellement) header('Content-type: application/json; charset=UTF-8'), j'ai bien un type "json"

    Bonne journée

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 520
    Par défaut
    Citation Envoyé par cc85 Voir le message
    Je teste avec Firebug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      fb('debut');
      if (isset($_POST['tabJson'])) {
        $tabBdd = json_decode($_POST['tabJson']);
        fb('ok');
      } else {
        fb('ko');
      }
      fb('fin');
    J'ai "ko".
    Et si tu essaies d'ajouter le nom de variable dans data d'ajax :data : {"tabJson":tabJson}, c'est toujours ko ?

    Puis je vois que l'erreur est relative à JS SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data et pas au PHP, plus précisément a JSON.parse() alors que je ne vois nulle part JSON.parse dans ton code.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Puis je vois que l'erreur est relative à JS SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data et pas au PHP, plus précisément a JSON.parse() alors que je ne vois nulle part JSON.parse dans ton code.
    JSON.parse est une fonction JS. Je l'utilise en test dans mon script juste après 'stringify' et avant '$.ajax' et ça s'affiche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let obj = JSON.parse(tabJson);
    for (let i=0; i<obj.length;i++) {
      console.log(obj[i].annee, obj[i].activite, obj[i].comment);}
    Le message
    SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
    je l'ai en retour de '$.ajax'

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 520
    Par défaut
    Si ajax passe au bloc error au lieu de success, ceci dit qu'il y'a des erreurs dans le fichier PHP (niveau serveur), et si tu veux les identifier il faudrait seulement les afficher avec un console.log()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    error : function(resultat, statut, erreur) {
      console.log("résultat :",resultat,", Erreur :",erreur); //Permet d'afficher + de détails dans la console
    }
    Est-ce que le fichier PHP retourne une réponse json avec json_encode() ou pas ? car c'est obligatoire vu que tu utilises le type de données json dataType:"json" dans les paramètres d'ajax.

    D'après ce que je vois, l'erreur de JSON.parse() est invoquée par $.ajax même et pas par la ligne let obj = JSON.parse(tabJson);, parce $.ajax décode la réponse automatiquement avec JSON.parse lorsque le type de données est json, et donc si le fichier PHP ne renvoie pas une réponse json valide, l'erreur est immédiatement affichée.

    Peux-tu nous montrer tout le fichier PHP ?

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 332
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 332
    Billets dans le blog
    17
    Par défaut
    Mais, dès que je veux l'utiliser dans le php, j'ai la réponse :
    SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data
    Qui donne cette erreur ?

    Le JSON que tu as collé est bon, et PHP arrive bien à le décoder => https://onlinephp.io/c/21daf

    S'il y en a un, regarde le JSON de réponse.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    Bonjour,

    Citation Envoyé par Séb. Voir le message
    Qui donne cette erreur ?
    Nom : img02.png
Affichages : 396
Taille : 5,7 Ko
    Citation Envoyé par Toufik83 Voir le message
    Et si tu essaies d'ajouter le nom de variable dans data d'ajax :data : {"tabJson":tabJson}, c'est toujours ko ?
    C'est tout bon !!! Merci !!!

    Enfin presque...

    J'ai bien maintenant ok quand je décode 'tabJson' et je récupère bien 39 valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fb('Nombre de valeurs ' . count($tabBdd));
    Mais j'ai toujours l'erreur :
    - Dans la console en réponse à la requête XHR POST
    - En retour de la fonction $.ajax en erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    error : function(resultat, statut, erreur) {
      console.log(resultat); //Permet d'afficher + de détails dans la console
      alert("Erreur !!!! " + erreur);
    Je continue...

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

Discussions similaires

  1. Incompréhensible Uncaught SyntaxError: JSON.parse: unexpected character
    Par rdtech dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/12/2021, 16h58
  2. Réponses: 1
    Dernier message: 11/12/2015, 12h15
  3. Réponses: 2
    Dernier message: 31/05/2015, 10h46
  4. [AJAX] SyntaxError: JSON.parse: unexpected character
    Par nanousik dans le forum jQuery
    Réponses: 4
    Dernier message: 07/08/2013, 16h49
  5. Réponses: 6
    Dernier message: 06/05/2012, 17h41

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