du PHP à JSON

du PHP à JSON - PHP - Programmation

Marsh Posté le 10-09-2011 à 23:05:54    

Bonsoir les hardwaïriens :o
 
Je voudrais récupérer du JSON généré en PHP.
Mon code PHP est le suivant :

Code :
  1. $retour["header"] = utf8_encode (addslashes($header));
  2. $retour["article"] = utf8_encode (addslashes($article));
  3. $retour["footer"] = utf8_encode (addslashes($footer));
  4. $json =  json_encode($retour );
  5. header('Content-Type: application/json');
  6. echo $json;


 
Première question, (par curiosité, ma vrai question est la 2nd) pourquoi même quand je met "riri", "fifi" et "loulou" dans mes trois variables $header, $article et $footer, et que au lieu de bêtement afficher la variable $json, je fais :
 

Code :
  1. $errorJSON = "";
  2. switch (json_last_error()) {
  3.         //case JSON_ERROR_NONE:
  4.            //$error = ' - Aucune erreur';
  5.         //break;
  6.         case JSON_ERROR_DEPTH:
  7.             $errorJSON = ' - Profondeur maximale atteinte';
  8.         break;
  9.         case JSON_ERROR_STATE_MISMATCH:
  10.             $errorJSON = ' - Inadéquation des modes ou underflow';
  11.         break;
  12.         case JSON_ERROR_CTRL_CHAR:
  13.             $errorJSON = ' - Erreur lors du contrôle des caractères';
  14.         break;
  15.         case JSON_ERROR_SYNTAX:
  16.             $errorJSON = ' - Erreur de syntaxe ; JSON malformé';
  17.         break;
  18.         case JSON_ERROR_UTF8:
  19.             $errorJSON = ' - Caractères UTF-8 malformés, probablement une erreur d\'encodage';
  20.         break;
  21.         default:
  22.             $errorJSON = ' - Erreur inconnue';
  23.         break;
  24. }
  25. if( $errorJSON == "" ){
  26.  echo $json;
  27. } else {
  28.  echo utf8_encode ('{"header":"","article":"Attention, la production du json a provoqué l\'erreur'.$errorJSON .', contacter l\'administrateur.","footer":""}');
  29. }


 
Alors systématiquement, l'erreur JSON_ERROR_SYNTAX est levée ? (alors que la variable $json contient tout ce qu'il faut) ?
 
2ième question :
 
Coté client, j'utilise jquery, et j'ai ce code là :
Pour le HTML :

Code :
  1. <div id="header">header
  2.  </div>
  3.  <div id="article"></div>
  4.  <div id="footer">footter</div>


 
Pour le JQuery :

Code :
  1. function recupererArticle(id){
  2. console.debug("fonction recupererArticle", id);
  3. //$("#numero_article" ).val(id);
  4. //$("#article" ).load("article_print.ajax.php?idArticle=" + id);
  5. $.ajax({
  6.  url: "article_print.ajax.php?idArticle="+id, // url de la page à charger
  7.  cache: false, // pas de mise en cache
  8.  dataType: "jsonp",
  9.  success:function(jsonRetour){ // si la requêté est un succès
  10.   console.debug(jsonRetour);
  11.   /*valueRetour = JSON.parse(jsonRetour);
  12.   $("#header" ).html(valueRetour.header);
  13.   $("#article" ).html(valueRetour.article);
  14.   $("#footer" ).html(valueRetour.footer);*/
  15.  },
  16.  error:function(XMLHttpRequest, textStatus, errorThrows){ // erreur durant la requete
  17.   value_html ="attention, erreur durant la requette, veuillez réessayer ultérieurement";
  18.  }
  19. });
  20. }


 
et cela provoque toujours l'erreur (les 3 variables contiennent du HTML):

Code :
  1. invalid label
  2. {"header":"<b>Article n\u00b0 2(ajoute... 14hXX )","article":"","footer":""}


 
Quelqu'un serait pourquoi ? J'ai regardé plein de site sur le sujet, chacun y va de sa solution, mais aucune ne marche (d'où les transformations en UTF8 et l'ajout des antislash)
 
Merci par avance !


Message édité par naeco le 10-09-2011 à 23:12:17
Reply

Marsh Posté le 10-09-2011 à 23:05:54   

Reply

Marsh Posté le 10-09-2011 à 23:14:57    

Je suis pas sûr, mais je crois que j'ai posté cette question un peu trop tôt, car je crois avoir trouvé la réponse ici : :pt1cable:  
 
http://forum.jquery.com/topic/inva [...] jsonp-call :
 

Citation :

it's the callback mechanism i missed.


 
Je regarde et je reviens poster ici...

Reply

Marsh Posté le 10-09-2011 à 23:17:16    

oué bof, rien de transcendant :o
 
Si vous avez une idée :o

Reply

Marsh Posté le 13-09-2011 à 19:21:39    

Ouais.
 
Moi on me les brise pas plus de 5 minutes, et quand ça arrive, je cherche même pas, j'utilise une autre fonction d'encodage style serialize() / unserialize()  
base64_encode() / base64_decode
uuencode() / uudecode()


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 13-09-2011 à 19:22:43    

Quand ça foire du côté de json, il faut en principe utiliser un htmlentities() avant de json-encoder.


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 13-09-2011 à 19:42:12    

loool j'aime ton franc parlé :o
 
mais tu sais, c'est mon travail, et donc je vis ça au quotidien de devoir trouver un plan B pour contourner le problème, et non le résoudre :o
 
Or là, je travail pour mon club alors je me fais "plaisir" en tentant de faire les choses comme j'aime les faire normalement ;)
 
Mais ceci dit, la solution que j'ai adoptée casse tout mes propos lol, j'ai utilisé ça :
 
http://pear.php.net/pepr/pepr-proposal-show.php?id=198
 
Merci en tout cas !
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed