2010-06-30 6 views
0

regard sur cette fonction s'il vous plaîtjquery problème JSON

$(".menu_tree img.edit").click(function() 
    { 
     id = this.id; 
     lang = '<?=$lang_id?>'; 
     var body_width = $("body").width(); 
     var body_height = $("body").height(); 
     $("#shadow").width(body_width); 
     $("#shadow").height(body_height); 
     $("#shadow").show(); 

     var width = $("#edit_title").width(); 
     var height = $("#edit_title").height(); 
     $("#edit_title").height(0); 
     $("#edit_title").width(0); 
     $("#edit_title").animate(
     { 
      width: width, 
      height: height 
     },600); 
     $.post 
     (
      "get_title.php", 
      {id: id, lang: lang}, 
      function(data) 
      { 
       alert("qqq"); 
      }, 
      "json" 
     ); 
    }); 

dans get_title.php je produis objet JSON, quelque chose comme {name:"name",val:"value"} il fonctionne très bien si je n'écrit "json", mais avec "json" il n'a même pas d'alerte ma qqq :(

Toutes les idées?

Merci

+0

S'il y a un problème lors de l'analyse de votre réponse en tant que json, ce problème peut se produire. Vérifiez si votre réponse arrive comme un json valide ou non ... –

+0

J'ai déjà vérifié, il s'agit de '{name:" name ", val:" value "}' format. mais même il vient dans un mauvais format, je pense qu'il doit faire une alerte? – Simon

+0

Il s'attend à ce qu'un objet json soit retourné, si ce n'est pas json, il ne va pas se déclencher quand vous déclarez explicitement qu'il devrait être json. Les gens sont prêts/essayent de vous aider avec ceci, mais ont besoin de plus d'informations pour le faire. –

Répondre

3

L'analyseur 1.4.2 est plus strict que les versions antérieures. Comme noté par michal, ce json n'est pas valide parce que les noms de propriété ne sont pas doubles. J'ai été récemment confronté à ce problème lors de la mise à niveau d'un site vers jQuery 1.4.2.

Je suggère fortement que PHP prenne en charge le codage json pour vous. Mon problème, que je soupçonne être le vôtre aussi, était que j'établissais des chaînes json manuellement en PHP, et que jQuery le rejetait parce que certaines étaient simples.

Ainsi, pour le PHP plutôt que quelque chose comme

echo "{name:'$val',val:'$val'}"; 
exit; 

PHP laisser l'encodage:

header('Content-type: application/json'); 
echo json_encode(array('name'=>$val,'val'=>$val)); 
exit; 

également, l'ajout d'un en-tête Content-Type pour JSON ne peut pas faire du mal si vous aren déjà pas.

3

{name: "name", val: "value" } n'est pas valide JSON. Les clés doivent également être des chaînes.

{"name": "name", "val": "value"}