Réponse multiple avec JSON
Posté : 27 mai 2011, 11:20
Bonjour. Après des heures de lecture et de recherche, je me retourne vers vous tous pour mon problème.
Après une requête PHP/MYSQL, je transforme le résultat en chaîne JSON.
la chaîne JSON est sous la forme {"pseudo": "Toto", "NIVEAU": "1"}
Il m'est donc possible de récupérer les variables sous Ajax:
Tout va bien.
Mais le problème vent lorque le retour MYSQL renvoit plusieurs lignes de réponses:
La chaîne JSON ressemble alors à 3 lignes {"pseudo": "Toto", "NIVEAU": "1"}{"pseudo": "Titi", "NIVEAU": "2"}{"pseudo": "Tito", NIVEAU": "3"}
et Ajax renvoit une erreur au Navigateur sur le format de la chaîne, même en tentant les
J'ai alors vu que la chaîne JSON devrait être séparée par des virgules, et plus précisement sous la forme :
voir http://www.json.org/js.html
et la commande javascript : $(div).innerHTML += 'Pseudo: '+reponse.user[2].pseudo+"<br/>\n"+'Niveau: '+reponse.user[2].NIVEAU;
fonctionne.
Ma question est : comment faire pour que la chaîne multiple soit retournée au bon format en PHP ?
L'essai suivant me retourne des réponses en duplicata
Après une requête PHP/MYSQL, je transforme le résultat en chaîne JSON.
Code : Tout sélectionner
$row = mysql_fetch_assoc($query)
$json = json_encode($row);Il m'est donc possible de récupérer les variables sous Ajax:
Code : Tout sélectionner
reponse=eval('('+xhr_object.responseText+')');
$(div).innerHTML='Pseudo: '+reponse.pseudo+"<br/>\n"+'Niveau: '+reponse.NIVEAU;Mais le problème vent lorque le retour MYSQL renvoit plusieurs lignes de réponses:
La chaîne JSON ressemble alors à 3 lignes {"pseudo": "Toto", "NIVEAU": "1"}{"pseudo": "Titi", "NIVEAU": "2"}{"pseudo": "Tito", NIVEAU": "3"}
et Ajax renvoit une erreur au Navigateur sur le format de la chaîne, même en tentant les
Code : Tout sélectionner
$(div).innerHTML='Pseudo: '+reponse.pseudo[1]+"<br/>\n"+'Niveau: '+reponse.NIVEAU[1];Code : Tout sélectionner
{"user": [
{"pseudo": "Toto", "NIVEAU": "1"}, {"pseudo": "Titi", "NIVEAU": "2"}, {"pseudo": "Tito", "NIVEAU": "3"}
]
}; et la commande javascript : $(div).innerHTML += 'Pseudo: '+reponse.user[2].pseudo+"<br/>\n"+'Niveau: '+reponse.user[2].NIVEAU;
fonctionne.
Ma question est : comment faire pour que la chaîne multiple soit retournée au bon format en PHP ?
L'essai suivant me retourne des réponses en duplicata
<?php
// Accès MySQL
include '../commun/connexion.inc.php';
include '../commun/fonctions.inc.php';
// $pseudo = $_GET['pseudo'];
// $sql = "select * from tbl_user where pseudo='$pseudo'";
$table = 'tbl_user';
$sql = "select * from $table";
$query = mysql_query($sql);
$numrows = mysql_num_rows($query);
echo '{"user"'.": [ ";
$json = '';
while ($row = mysql_fetch_assoc($query)) {
if ($json == '') $json = json_encode($row); // 1ère ligne sans début de virgule
else {$json .= ", ".json_encode($row); // lignes suivantes séparées par une virgule sauf la fin
echo $json;}
}
echo " ] }";
?>
Merci de votre aide !
(Le défi ultérieur consitera à itérer la chaîne JSON en javasript pour afficher tous les résultats)
mctarek