2012-06-06 7 views
0

Je reçois des données du serveur avec Ajax.Parse Ajax réponse correctement

Les données retournées (de Firebug):

{"users":[{"name":"some name", "age":17},{"name":"some name2", "age":25}]} 

Lorsque je tente

$.post('server.php', function(data){ 
    var users = eval(data).users; 
    alert(users[0].name); 
}); 

Je reçois sur Firebug:

Uncaught SyntaxError: Unexpected token) 

Toute aide?

+0

Vous avez essayé sans eval? (Quel est le mal et ne devrait pas être utilisé de toute façon!) Juste 'data.users [0] .name' –

Répondre

0

Vous avez à entourer la chaîne JSON avec des supports

$.post('server.php', function(data){ 
    var users = eval('('+data+')').users; 
    alert(users[0].name); 
}); 

DEMO

+5

Je ne recommande vraiment pas cela. Passez simplement '" json "' comme dernier argument et 'data' sera un objet. – pimvdb

+0

evalJSON de Prototype et parseJSON de JQuery utilisent eval ... – skafandri

+2

@skafandri ParseJSON de jQuery essayera d'abord d'utiliser une fonction de navigateur native, et si elle n'existe pas, elle s'assurera que la chaîne est valide avant de l'analyser. Vérifiez la source jQuery et recherchez "parseJSON": http://code.jquery.com/jquery-latest.js – h2ooooooo

0

Je ne reçois pas le point sur eval() mais peut-être que je ne connais pas bien la fonction ...

Avec ce fonctionne:

var data = {"users":[{"name":"some name", "age":17},{"name":"some name2", "age":25}]}; 
alert(data.users[0].name); 

Vous pouvez également boucle avec:

$.each(data.users, function (i, user_obj){ 
    alert(user_obj.name); 
}); 

Regardez this demo.

Il est préférable d'ajouter le dataType: "json" à votre requête ajax afin qu'il soit correctement analysé.

+0

Ne fonctionne pas ... http://jsfiddle.net/bEj5X/ – skafandri

+0

Vous utilisez mootools au lieu de jQuery. –

+0

@AntonioLaguna Le problème n'est pas mootools, car son jdfiddle n'utilise que du javascript natif. Le problème est le fait qu'il utilise une chaîne au lieu d'un objet. C'est le bon JS: http://jsfiddle.net/bEj5X/1/ – h2ooooooo

10

S'il vous plaît ne pas utiliser eval - il est evil

Au lieu de cela, il suffit d'utiliser un paramètre de "JSON".

$.post('server.php', function(data) { 
    alert(data.users[0].name); 
}, "json"); 

Si vos en-têtes sont propres, vous ne même pas besoin du paramètre JSON, mais il oblige jQuery à vouloir recevoir et analyser comme JSON.

1

encoder des données entre parenthèses avec des guillemets simples

$.post('server.php', function(data){ 
     var users = eval('('+data+')'); 
     alert(users[0].name); 
    });