2010-11-27 14 views
1

Voici mon code PHP, il se fait une liste des collections de MongoDBphp json_encode ne se traduit pas en objet réel/faire chaîne de tableau en objet réel/tour php array en JSON

$list = $db->dbname->listCollections(); 
$result = array(); 
$i=0; 
foreach ($list as $thiscollection) { 
    $result[$i++] = $thiscollection->getName(); 
} 
echo json_encode($result); 

je console. connectez-vous le rappel et c'est ce que je vois.

["fruits", "dogs", "cars", "countries"] 

Le problème est que c'est une chaîne, pas un tableau. J'ai besoin de parcourir ces valeurs. Comment puis-je en faire un objet réel ou obtenir php pour me donner json plutôt que le tableau php afin que je puisse utiliser parseJSON dessus.

Merci.

js:

$.post('/ajax-database.php', function (data) { 
    console.log($.parseJSON(data)); 
    $.each(data, function (key, value) { 
     console.log(value); 
    }); 
}); 
+0

It * is * un tableau si la console l'affiche. – timdream

+0

@timdream quand isArray dit que ce n'est pas le cas. Lorsque j'essaie d'exécuter $ .each, j'obtiens tous les caractères, y compris les crochets et les guillemets. – Mark

+0

C'est câblé. Pourriez-vous poster votre fonction Javascript? Peut-être 'header ('Content-Type: text/javascript');' avant 'echo' pour s'assurer que jQuery interprète les données comme json? – timdream

Répondre

3

Je vois que vous utilisez jquery, si vous voulez que les données vous reviennent en tant qu'objet json, vous devez faire l'une des deux choses suivantes.

  1. tête add ("Content-Type: application/json") à votre fichier php, ceci indiquera jquery pour le convertir en un objet JSON au lieu comme texte

  2. Ajouter un quatrième paramètre votre .post de $,

 
$.post('/ajax-database.php', function (data) { 
    console.log($.parseJSON(data)); 
    $.each(data, function (key, value) { 
     console.log(value); 
    }); 
}, "json"); 

qui dira jquery d'appeler votre gestionnaire d'erreur si son pas JSON, comme si votre code php échoue et sorties html à la place. Vous devriez vraiment utiliser $ .ajax, je n'ai aucune idée de la raison pour laquelle quelqu'un utilise $ .post, vous ne pouvez pas faire toute erreur de traitement significatif.

+0

+1 était sur le point de publier quand j'ai vu le vôtre – Philar

+0

Si une requête avec jQuery.post() renvoie un code d'erreur, elle échouera silencieusement à moins que le script ait également appelé le global.Méthode ajaxError(). - http://api.jquery.com/jQuery.post/ – ajreal

+0

Oui je sais, je considère juste que c'est une mauvaise pratique de gérer globalement les erreurs à cet égard, car chaque script différent pourrait et probablement vaudra différemment. – Rahly

0

JSON est cordes. Si vous voulez pouvoir parcourir, alors vous devez le décoder.

+0

ouais mais le problème est que ce n'est pas JSON. il y a des crochets. – Mark

+0

Oui, c'est. La valeur supérieure n'est pas requise pour être un objet. –

+0

@Mark: souvenez-vous de [] signifie juste Array, et tous les tableaux sont des objets javascript ARE, ils ont des prototypes. – Rahly