0
votes

Json.parse () ne fonctionne pas avec une chaîne de type variable mais cela fonctionne avec son contenu si utilisé directement

Je reçois une chaîne d'une page PHP à l'aide d'un code simple que j'ai utilisé plusieurs fois pour obtenir des réponses de chaîne à partir de fichiers PHP. C'est la première fois que j'essaie de convertir ce résultat dans un objet JSON (ou une matrice).

Lorsque j'utilise json.parse sur la réponse, j'obtiens l'erreur ci-dessous. Si je passe comme paramètre de json.parse (), le texte que j'ai consolé log (i.e copié de la console tel qu'il est transmis à JavaScript), cela fonctionne parfaitement. P>

'[
{ "idDepart" : "1", "idCircuit" : "5", "dateDebut" : "2019-06-02", "nbPlaces" : "30", "prix" : "4000", "titrePromotion" : "vfv", "rabais" : "10" }, 
{ "idDepart" : "2", "idCircuit" : "5", "dateDebut" : "2019-06-10", "nbPlaces" : "30", "prix" : "6000", "titrePromotion" : "ded", "rabais" : "4" }, 
{ "idDepart" : "3", "idCircuit" : "5", "dateDebut" : "2019-07-02", "nbPlaces" : "30", "prix" : "7000", "titrePromotion" : "ded", "rabais" : "6" }
]'


11 commentaires

Quel personnage est à la ligne 1, colonne 1?


c'est tout ce qui est là


Pouvez-vous montrer votre code côté serveur qui retourne JSON ??


Le personnage est-il une apostrophe?


Je vais poster le code PHP


Ajouter console.log (BTOA (résultat)) et postez ce résultat.


Ceci: le résultat dans la console pour la variable "Résultat" est comme ceci: La console montre-t-elle en fait le caractère "` "" "" "? Si tel est le cas, le problème est que la chaîne est double indiquée sur le côté serveur.


Toute raison que vous ne pouvez pas utiliser JSON_ENCODE en PHP? Votre code ne supporte pas l'échappement des caractères.


J'ai essayé avec le "" et sans, même résultat


Quand j'utilise json_encode, il est retourné quelque chose de bizarre, peut-être que j'ai commis une erreur


Vous pouvez créer un tableau en PHP avec tous les éléments que vous souhaitez, puis utilisez JSON_ENOCDE à ce sujet ou construisez un élément à la fois et utilisez JSON_ENOCDE à ce sujet, si vous le mettez à l'intérieur »[" et "]".


3 Réponses :


-1
votes

Assurez-vous que vous définissez correctement l'en-tête sur votre script PHP

<?php header('Content-Type: text/json');


1 commentaires

C'est application / json et ne fera pas de différence si le code (y compris le code dans la question) ne prête aucune attention à l'en-tête.



2
votes

Vous ne devez pas essayer de créer votre JSON en manipulant la chaîne, mais utilisez la méthode interne json_encode . XXX

Comme ceci, vous êtes sûr à 100% d'avoir: < / p>

  • Erreur PHP Si votre entrée ne peut pas être codée.
  • JSON valide affiché.

    --- Modifier ---

    Je vois que vous voyez le code en français, faites attention à un char (comme à © © ...). Vous devriez avoir un codage UTF-8 partout.

    • votre php.ini
    • Votre camp d'approvisionnement en PDO
    • Votre base de données Charset, table et champs.

      $ dbhandle = nouveau PDO ("MySQL: hôte = $ dbhost; dbname = $ dbname; charset = uf-8", $ dbuser, $ dbpass); $ dbhandle-> exec ("régler le jeu de caractères UTF8");


3 commentaires

Fonctionne bien, merci de me montrer comment faire cela. Vous devriez inclure le "," après chaque ligne.


Oui, ce vrai :) S'il vous plaît vérifier aussi mon édition, cela peut vous aider


Merci beaucoup, je vais enregistrer votre réponse pour une référence future sur cette



1
votes

Pouvez-vous essayer de simplifier le script PHP à cela?

<?php
if (!session_id()) {
    @session_start();
}

header('Content-Type: application/json');
require 'controlleur/connexionDB.php';
$sql = "SELECT * FROM depart";

$result = $conn->query($sql);

$liste = array();
while($row = $result->fetch()){
  $list[] = [
    "idDepart" => $row->idDepart,
    "idCircuit" => $row->idCircuit,
    "dateDebut" => $row->dateDebut, 
    "nbPlaces" => $row->nbPlaces, 
    "prix" => $row->prix, 
    "titrePromotion" => $row->titrePromotion, 
    "rabais" => $row->rabais
  ];
}

echo json_encode($liste);


1 commentaires

ouais, comme ce que Yanis-git a répondu