càd que j'obtiens directement une array d'objets en javascript, sans passer par JSON.parse, ce que je ne comprends pas.
d'ai lleurs, si j'essaie de parser le json par : var truc = JSON.parse(files); , j'obtiens une erreur :
VM5602:1 Uncaught SyntaxError: Unexpected token o
donc, en résumé, je ne comprends pas pourquoi avec json_encode côté php, j'obtiens une liste d'objets côté javascript et non une string à parser...
Bonjour,
avec json_encode côté php tu crées une chaîne contenant du texte au format json. Quand du coté php tu concatènes "var files = " avec cette chaîne, tu obtiens une chaîne contenant du texte javascript.
Quand du coté html tu écris <script src='/Videos/php/browse.php'></script> tu insères ce code javascript dans le html.
Quand tu utilises la variable files ainsi déclarée, tu as un objet javascript, et c'est normal : la chaine retournée par le php devient du code javascript dans le html et tu te retrouves avec un truc du genre: var obj = [{},{}]; et pas var str = "[{},{}]" ;
C'est ce que tu retournes de ton php.
JSON.parse() prend une chaîne comme argument, pas un objet. Si tu veux parser ton json tu peux retourner une variable chaîne en faisant: echo "var files = ' " . json_encode($files, JSON_PRETTY_PRINT) . " ';n"; // j'ai laissé des espace pour voir les quotes alors files sera une chaîne que tu pourras parser, mais je ne vois pas le problème à généré l'objet files directement...
J'espère m'être fait comprendre, la distinction entre code et texte n'est pas toujours évidente ;)
Le 29/03/2016 16:17, Une Bévue a écrit :
je souhaite transmettre à une page html une valeur en JSON obtenue par
php.
càd que j'obtiens directement une array d'objets en javascript, sans
passer par JSON.parse, ce que je ne comprends pas.
d'ai lleurs, si j'essaie de parser le json par :
var truc = JSON.parse(files);
, j'obtiens une erreur :
VM5602:1 Uncaught SyntaxError: Unexpected token o
donc, en résumé, je ne comprends pas pourquoi avec
json_encode côté php, j'obtiens une liste d'objets côté javascript et
non une string à parser...
Bonjour,
avec json_encode côté php tu crées une chaîne contenant du texte au
format json.
Quand du coté php tu concatènes "var files = " avec cette chaîne, tu
obtiens une chaîne contenant du texte javascript.
Quand du coté html tu écris <script src='/Videos/php/browse.php'></script>
tu insères ce code javascript dans le html.
Quand tu utilises la variable files ainsi déclarée, tu as un objet
javascript, et c'est normal : la chaine retournée par le php devient du
code javascript dans le html et tu te retrouves avec un truc du genre:
var obj = [{},{}];
et pas
var str = "[{},{}]" ;
C'est ce que tu retournes de ton php.
JSON.parse() prend une chaîne comme argument, pas un objet.
Si tu veux parser ton json tu peux retourner une variable chaîne en faisant:
echo "var files = ' " . json_encode($files, JSON_PRETTY_PRINT) . "
';n"; // j'ai laissé des espace pour voir les quotes
alors files sera une chaîne que tu pourras parser, mais je ne vois pas
le problème à généré l'objet files directement...
J'espère m'être fait comprendre, la distinction entre code et texte
n'est pas toujours évidente ;)
càd que j'obtiens directement une array d'objets en javascript, sans passer par JSON.parse, ce que je ne comprends pas.
d'ai lleurs, si j'essaie de parser le json par : var truc = JSON.parse(files); , j'obtiens une erreur :
VM5602:1 Uncaught SyntaxError: Unexpected token o
donc, en résumé, je ne comprends pas pourquoi avec json_encode côté php, j'obtiens une liste d'objets côté javascript et non une string à parser...
Bonjour,
avec json_encode côté php tu crées une chaîne contenant du texte au format json. Quand du coté php tu concatènes "var files = " avec cette chaîne, tu obtiens une chaîne contenant du texte javascript.
Quand du coté html tu écris <script src='/Videos/php/browse.php'></script> tu insères ce code javascript dans le html.
Quand tu utilises la variable files ainsi déclarée, tu as un objet javascript, et c'est normal : la chaine retournée par le php devient du code javascript dans le html et tu te retrouves avec un truc du genre: var obj = [{},{}]; et pas var str = "[{},{}]" ;
C'est ce que tu retournes de ton php.
JSON.parse() prend une chaîne comme argument, pas un objet. Si tu veux parser ton json tu peux retourner une variable chaîne en faisant: echo "var files = ' " . json_encode($files, JSON_PRETTY_PRINT) . " ';n"; // j'ai laissé des espace pour voir les quotes alors files sera une chaîne que tu pourras parser, mais je ne vois pas le problème à généré l'objet files directement...
J'espère m'être fait comprendre, la distinction entre code et texte n'est pas toujours évidente ;)
Une Bévue
Le 31/03/2016 03:38, Antoine Polatouche a écrit :
J'espère m'être fait comprendre, la distinction entre code et texte n'est pas toujours évidente;)
ben oui, d'autant que pour moi, le : echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";n";
fait équivaloir, côté js, la variable "files" au json_encode($files, JSON_PRETTY_PRINT), càd du texte...
euh, ça veut quand même dire que, côté php, json_encode(...) ne retourne pas une chaine ???
ça n'est toujours pas vraiment clair pour moi.
même si j'ai trouvé une solution (utiliser la variable "files" telle qu'elle est).
merci beaucoup pour votre patience.
Le 31/03/2016 03:38, Antoine Polatouche a écrit :
J'espère m'être fait comprendre, la distinction entre code et texte
n'est pas toujours évidente;)
ben oui, d'autant que pour moi, le :
echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";n";
fait équivaloir, côté js, la variable "files" au json_encode($files,
JSON_PRETTY_PRINT), càd du texte...
euh, ça veut quand même dire que, côté php, json_encode(...) ne retourne
pas une chaine ???
ça n'est toujours pas vraiment clair pour moi.
même si j'ai trouvé une solution (utiliser la variable "files" telle
qu'elle est).
J'espère m'être fait comprendre, la distinction entre code et texte n'est pas toujours évidente;)
ben oui, d'autant que pour moi, le : echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";n";
fait équivaloir, côté js, la variable "files" au json_encode($files, JSON_PRETTY_PRINT), càd du texte...
euh, ça veut quand même dire que, côté php, json_encode(...) ne retourne pas une chaine ???
ça n'est toujours pas vraiment clair pour moi.
même si j'ai trouvé une solution (utiliser la variable "files" telle qu'elle est).
merci beaucoup pour votre patience.
Olivier Miakinen
Le 08/04/2016 07:05, Une Bévue a écrit :
Le 31/03/2016 03:38, Antoine Polatouche a écrit :
J'espère m'être fait comprendre, la distinction entre code et texte n'est pas toujours évidente;)
ben oui, d'autant que pour moi, le : echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";n";
fait équivaloir, côté js, la variable "files" au json_encode($files, JSON_PRETTY_PRINT),
Oui.
càd du texte...
Tu veux dire une chaîne de caractères ? C'en est une pour PHP, ce qui lui permet de la concaténer avec la chaîne "var files = " et de l'afficher avec echo. Une fois affichée avec echo, ce ne sera pas une chaîne pour JavaScript.
euh, ça veut quand même dire que, côté php, json_encode(...) ne retourne pas une chaine ???
Mais si, c'est une chaîne pour PHP.
ça n'est toujours pas vraiment clair pour moi.
Essayons avec d'autres exemples.
=============================================== Exemple 1.
côté PHP : echo "var nombre = " . "42" . "n"; ("42" est bien une chaîne pour PHP)
côté JavaScript : var nombre = 42 (42 n'est pas une chaîne pour JavaScript)
=============================================== Exemple 2.
côté PHP : echo "var str = " . """ . "42" . """ . "n"; ("42" est toujours une chaîne pour PHP)
côté JavaScript : var str = "42" (il a fallu rajouter des « " » pour obtenir "42")
« Au fond, diviser par zéro revient à unifier la Mécanique Quantique et la Relativité Générale. » -- M.A. le 7/3/2016 dans fr.sci.maths
Le 08/04/2016 07:05, Une Bévue a écrit :
Le 31/03/2016 03:38, Antoine Polatouche a écrit :
J'espère m'être fait comprendre, la distinction entre code et texte
n'est pas toujours évidente;)
ben oui, d'autant que pour moi, le :
echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";n";
fait équivaloir, côté js, la variable "files" au json_encode($files,
JSON_PRETTY_PRINT),
Oui.
càd du texte...
Tu veux dire une chaîne de caractères ? C'en est une pour PHP, ce
qui lui permet de la concaténer avec la chaîne "var files = " et de
l'afficher avec echo. Une fois affichée avec echo, ce ne sera pas
une chaîne pour JavaScript.
euh, ça veut quand même dire que, côté php, json_encode(...) ne retourne
pas une chaine ???
Mais si, c'est une chaîne pour PHP.
ça n'est toujours pas vraiment clair pour moi.
Essayons avec d'autres exemples.
=============================================== Exemple 1.
côté PHP :
echo "var nombre = " . "42" . "n";
("42" est bien une chaîne pour PHP)
côté JavaScript :
var nombre = 42
(42 n'est pas une chaîne pour JavaScript)
=============================================== Exemple 2.
côté PHP :
echo "var str = " . """ . "42" . """ . "n";
("42" est toujours une chaîne pour PHP)
côté JavaScript :
var str = "42"
(il a fallu rajouter des « " » pour obtenir "42")
J'espère m'être fait comprendre, la distinction entre code et texte n'est pas toujours évidente;)
ben oui, d'autant que pour moi, le : echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";n";
fait équivaloir, côté js, la variable "files" au json_encode($files, JSON_PRETTY_PRINT),
Oui.
càd du texte...
Tu veux dire une chaîne de caractères ? C'en est une pour PHP, ce qui lui permet de la concaténer avec la chaîne "var files = " et de l'afficher avec echo. Une fois affichée avec echo, ce ne sera pas une chaîne pour JavaScript.
euh, ça veut quand même dire que, côté php, json_encode(...) ne retourne pas une chaine ???
Mais si, c'est une chaîne pour PHP.
ça n'est toujours pas vraiment clair pour moi.
Essayons avec d'autres exemples.
=============================================== Exemple 1.
côté PHP : echo "var nombre = " . "42" . "n"; ("42" est bien une chaîne pour PHP)
côté JavaScript : var nombre = 42 (42 n'est pas une chaîne pour JavaScript)
=============================================== Exemple 2.
côté PHP : echo "var str = " . """ . "42" . """ . "n"; ("42" est toujours une chaîne pour PHP)
côté JavaScript : var str = "42" (il a fallu rajouter des « " » pour obtenir "42")