Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur de syntax AJAX

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of th

Sujet résolu
    8 octobre 2019 à 6:44:45

    Salut tous le monde !

    j'ai envie d'écrire dans un fichier sur le serveur,

    donc en utilisant l'objet xmlhttprequest c'est nickel tout marche bien, jusqu'au moment ... du teste ^^

    alors je souhaite envoyer via la méthode POST, un tableau d'objet, qui sera transférer sur un script php et ensuite ranger bien sagement dans un fichier au format JSON.

    (donc j'ai bien effectuer la convertion objet -> texte avec JSON.stingify, ainsi que la reconvertion avec JSON.parse)

    donc la conversion fonctionne bien je teste avec console.log coté "client" (localhost) : ok

    ensuite l'envoie : aucune erreur, et le fichier est bien apparu, le format texte est conforme(visuellement en tout cas ^^), donc j'en déduis que tout est bon ...

    enfin la reconvertion donc je lance un appel avec la méthode "get", l'url est bonne, j'insere un évenement de type "load", et pour l'instant seulement 1 instruction : afficher le tableau sous forme d'objet.

    mais la ! une erreur au dela de ma compréhension actuelle, je cite :

    "SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data"

    donc la je suis face a un mur (en carton certes, mais je n'ai pas de ciseau :'( ) et j'aurais besoin d'aide pour ce petit message d'erreur ...

    donc le contenu du fichier (qui contient un seul objet pour l'instant) :

    Array
    (
        [0] => Array
            (
                [film] => zorro
                [nom] => toto
                [prenom] => vovo
                [ville] => toulouse
                [habitant] => 400000
            )
    
    )
    

    donc le fichier ici présent, c'est normal qu'il ne soit pas conforme au JSON ?

    voila, je crois avoir (trop?) tout dis !

    merci de votre aide :))

    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2019 à 12:29:26

      Bonjour,

      Pour avoir du json il faut transformer ton tableau en json (au passage, c'est du php)

      https://www.php.net/manual/fr/function.json-encode.php

      • Partager sur Facebook
      • Partager sur Twitter
        8 octobre 2019 à 13:33:36

        je n'ai pas vu sa dans le tuto sur openclassroom ?

        la fonction JSON.stringify ne ne fais pas la même chose ?:

        code coté client (script.js lié a index.html):

        goCommande.addEventListener("click",function(){
            let requete = new XMLHttpRequest();
            requete.open("POST", "http://localhost/javascript-web-srv/post_json.php");
            requete.setRequestHeader("Content-Type", "application/json");
            console.log(listeEntiere);
            let donnee = JSON.stringify(listeEntiere);
            console.log(donnee);
            requete.send(donnee);
        });

        code coté serveur (post_json.php présent coté serveur sur

        http://localhost/javascript-web-srv/post_json.ph

        )

        ):

        <?php 
        
        $data = print_r(json_decode(file_get_contents('php://input'), true), true);
        
        file_put_contents('fichier/post_json.log',$data);

        ensuite je souhaite afficher le fichier sur autre page html :

        code coté client(liste.js lié a une page tierce(sur laquel je veux afficher la liste pour l'exemple appelé liste.html) :

        let requete = new XMLHttpRequest();
        requete.open("GET", "http://localhost/javascript-web-srv/fichier/post_json.log");
        requete.addEventListener("load", function()
        {
            console.log(JSON.parse(requete.responseText));
        });
        
        requete.send(null);

        donc les convertion en JSON sont respectés,

        les requetes a priori fonctionnelles ...

        et pourtant lorsque je lance mon liste.html j'ai cette erreur de syntaxe dans la console :

        "SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data"

        ;

        merci de votre aide 0:)





        • Partager sur Facebook
        • Partager sur Twitter
          8 octobre 2019 à 14:34:52

          $data = print_r(json_decode(file_get_contents('php://input'), true), true);

          et donc pour toi c'est du JSON qu'il y a dans $data ?

          json_decode transforme du json en tableau php :

          https://www.php.net/manual/fr/function.json-decode.php

          • Partager sur Facebook
          • Partager sur Twitter
            8 octobre 2019 à 15:59:15

            Ahhh ! j'ai compris (mdr enfin , lol ...) !

            okay oui , donc si je prend le contenu de la requete POST de cette manière :

            $data = print_r(file_get_contents('php://input'), true);
            
            file_put_contents('fichier/post_json.log',$data);

            ainsi, il n'y a pas de conversion objet JSON => variable PHP et inversement,

            l'objet JSON (étant donné que c'est du texte) rentre dans la variable data.

            ainsi j'ai juste a l'appeler avec :

            let requete = new XMLHttpRequest();
            requete.open("GET", "http://localhost/javascript-web-srv/fichier/post_json.log");
            requete.addEventListener("load", function()
            {
                console.log(JSON.parse(requete.responseText));
            });
            
            requete.send(null);

            qu'en penses-tu ?


            • Partager sur Facebook
            • Partager sur Twitter
              8 octobre 2019 à 16:19:04

              ça devrais marcher mais niveau sécurité il faut faire attention : tu ne sais pas ce qu'il y a dans ton fichier json, ça peut être n'importe quoi. Je ne pourrais pas t'aider à sécuriser ça, je ne m'y connais pas dans ce domaine en php.
              • Partager sur Facebook
              • Partager sur Twitter
                10 octobre 2019 à 5:26:50

                sa marche, j'ai bien avancé sur le projet, au lieu de mettre dans dans un fichier, je mets sa dans une bdd, c'est beaucoup plus simple a gérer :o

                sujet résolu :))

                • Partager sur Facebook
                • Partager sur Twitter
                  Staff 10 octobre 2019 à 7:58:09

                  Bonjour,

                  Sujet résolu

                  Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça :) Postez votre code html et css (bouton '</>') !!

                  Erreur de syntax AJAX

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown