11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Dans un appel AJAX à un script php, je réponds en texte de la syntaxe JSON :


  $chaine_Json = '{';
  $chaine_Json .= '"retour": "'.$json_retour.'",';
  $chaine_Json .= '"message": "'.$json_msg.'",';
  $chaine_Json .= '"id": "'.$json_id.'"';
  $chaine_Json .= '}';


Pour la constitution, ce qui donne :
{"retour":"true","message":"ok",id:"12"}

mon script javascript l'interprète par ailleurs via :

  alert(transport.responseText);
  reponse = eval(transport.responseText);
  alert(reponse);


Le premier alert est là pour me montrer que la valeur renvoyée est correcte, ensuite j'en fais un eval.
Et en fait durant l'eval le script s'arrête et le deuxième alert n'est jamais exécuté.

Seulement firebug ne me renvoit aucune erreur ni rien, je suis donc un peu perdu.

Auriez vous une idée / piste ?

Merci d'avance.
Modifié par Le Zla (01 Feb 2008 - 11:04)
Salut,

Je m'intéresse tout juste à JSON, je ne sais donc pas si c'est pertinent, mais ton id n'est pas entouré de guillemets.
je ne suis pas non plus spécialiste de JSON peut-être a 3 va-t-on y arriver.

quand j'ai regardé ajax moi j'ai eu l'impression qu'il y avait deux format JSON selon qu'on utilise eval ou pas.

voici 2 cas que j'ai testé qui marchent ( dans les 2 cas c'est parait-il du JSON pourtant ce n'est pas la même chose ).

<script>
 var text ='{"retour":"true","message":"ok","id":"12"}';
 var func  = new Function("return "+text);
 toto = func();
 alert(toto.id);
 alert(toto.message);
 alert(toto.retour);
 
 var text2 ='["retour:true","message:ok","id:12"]';
 tata = eval (text2);
 alert(tata[0]);
 alert(tata[1]);
 alert(tata[2]);
 
</script>


par contre eval de la premiere forme me retourne une erreur dans la console d'erreur. pas toi?
Modifié par CPascal (31 Jan 2008 - 16:53)
Re,

merci pour le lien bbp

sinon oui avec le eval ecris comme ça cela passe eval('(' + text + ')'); aussi avec le format objet + eval.
Modifié par CPascal (31 Jan 2008 - 17:33)
Bonjour,

@bpp
Oups désolé erreur de copier/coller, regarde ils sont dans le code php qui génère le JSON.

@Cpascal
Effectivement la première fois tu retournes un objet et la seconde un tableau.

Il y a cependant bien deux façon de faire avec JSON, ou bien tu envois ta réponse en texte et l'interprète avec EVAL ou bien tu l'envoies via l'en-tête HTTP en précisant que c'est une entête JSON.

J'utilise la première forme car j'ai rencontré des problèmes compatibilité ie6 (tiens tiens) sur une autre appli...

Bon en attendant, j'ai toujours pas d'erreur ni de résultat.
tu as essayé avec la syntaxe que j'ai mise dans le dernier post?

si ton alert fonctionne pas c'est symptomatique d'une erreur qui arrete le script avant me semble.

sinon pour qu'on essaye de t'aider nous faudrait voir un bout de code plus large. car là je vois pas.
Modifié par CPascal (01 Feb 2008 - 10:26)
Oops désolé j'étais passé trop vite sur ton premier message, effectivement ta syntaxe marche, bien que je dois avouer ne pas trop comprendre pourquoi ...

Pour le coup de l'alert c'était effectivement comme si une erreur avait lieu avant, sauf que firebug ne remontait rien.

En tout cas ca marche, merci Smiley smile
Salut,

personnellement j'ai bien un message d'erreur de la part de la bonne vieille console d'erreurs de firefox :

Erreur : invalid label
Fichier source : file:///C:/Documents%20and%20Settings/*********/Bureau/test.html
Ligne : 13, Colonne : 9
Code source :
{"retour": "ret","message": "msg","id": "id"}

La solution est de concatener une parenthese fermante et ouvrant en debut et fin de chaine JSON pour qu'il l'interprete correctement comme dit précédemment.

D'ailleurs expliqué : ici après une breve recherche google.
Modifié par skywalk3r (01 Feb 2008 - 11:05)
Marrant ca...
Je ne sais pas pourquoi firebug me boudait...

Au moins je saurais pour la prochaine fois.
Salut,

En effet, c'est un piège courant : la grammaire javascript spécifie qu'une instruction commençant par "{" est un bloc de code, c'est pourquoi il faut entourer l'objet JSON avec des parenthèses.