2010-11-22 4 views
0

Je renvoie un fichier JSON du serveur Web, mais je ne peux pas référencer l'une des clés.Je ne peux pas référencer les clés en retournant JSON

{"voteid":110.0,"message":"Your request was processed.","success":true} 

response.message alertes d'alerte/de voteid undefined

alert(response.voteid); 

Alerting la chaîne complète fonctionne très bien: alert(response); mais c'est pas bon puisque je veux référencer les clés individuellement. Mon objectif final est d'obtenir la clé de voteid du JSON et l'ajouter à un point d'ancrage, ce qui ne fonctionne pas non plus - avec une chaîne complète ou juste une clé:

success: function(response) { $(".fav").data("voteid", response.voteid) } 
<a class="fav" data-voteid=""> 

Sur une note côté, je ne » Je sais pourquoi il y a un 0 à la fin du vote. Je retourne le nombre comme une chaîne!

EDIT: Corrigé en définissant dataType sur JSON, les données ne s'ajouteront pas à l'attribut data-votid de l'ancre. Je l'ai fait pour ajouter l'ID en utilisant .attr au lieu de .data - merci beaucoup à tous!

+0

Il est donc faux d'avoir des champs à virgule flottante appelés "id". – cHao

+0

cHao, je ne sais pas pourquoi cela se passe cependant. Je retourne une chaîne. Je ne sais pas d'où ça vient! – Mohamad

+0

@cHao: JavaScript n'a pas d'entiers. JSON non plus. '110.0' semble un choix étrange, cependant. :) –

Répondre

2

Vous avez exclu certaines parties clés de votre code, mais je suppose que vous n'avez pas défini dataType:'json' pour votre requête.

Ou vous pouvez appeler manuellement $.parseJSON:

success: function(response) { 
    var parsed = $.parseJSON(response); 
    $("fav").data("voteid", parsed.voteid); 
} 

Rappelez-vous, JSON est texte.

+0

Il était 'script' en changeant 'json' l'a corrigé, duhh .... mais il ne sera toujours pas ajouté au data-votred = "" dans l'ancre! – Mohamad

+1

@mel, @patrick dw: Mieux encore, laisser 'dataType' complètement désactivé et demander au serveur de retourner le type de contenu correct. –

1

Vous récupérez probablement votre JSON en tant que chaîne lorsque vous le souhaitez en tant qu'objet. Essayez ce qui suit:

var responseObject = eval (réponse);

alerte (responseObject.voteId)

puis google pourquoi eval est pas une bonne idée et comment travailler autour de cela.

+0

'eval' ne devrait presque jamais être utilisé, y compris 'parsing' JSON. C'est facile, mais très dangereux. – Phrogz

+0

C'est 'script' au lieu de 'json' qui l'a cassé:/- mais la valeur ne s'ajoutera pas à l'attribut data-votid de l'acnhor! – Mohamad

1

Spécifiez-vous le type de données comme json dans votre appel ajax? Il renvoie probablement le JSON sous la forme d'une chaîne qui ne vous permettra pas d'accéder aux clés. Si vous spécifiez JSON, jquery convertira la chaîne en objet

+0

Non, ça marche maintenant! Tour à ce sujet était «script» – Mohamad

Questions connexes