2010-02-04 4 views
1

Je suis this link pour créer un répéteur côté client.Problème lors de l'obtention de la valeur à partir de la paire valeur JSON

Selon le lien ci-dessus pour retrive la valeur d'une paire clé-valeur JSON nous pouvons utiliser résultat [i] .property, par exemple

for (var post in msg) 
{  
    var x= msg[post].Date; 
    alert(x); 
} 

Ici x renvoie la date de chaîne JSON. Lorsque j'essaie d'utiliser la même chose avec mes données, il retourne toujours undefined. J'ai essayé de faire apparaître un alert(msg.d) qui montre une belle chaîne JSON avec toutes mes données. Mais quand j'essaye msg[post].Date(property name) il retourne toujours undefined.

Veuillez nous aider ...

Merci d'avance.

Mise à jour:

Depuis le back-end je retourne une liste générique, puis le convertir en JSON en utilisant le code suivant.

public static string ConvertToJSON (ce objet obj) {

DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());  

    MemoryStream ms = new MemoryStream(); 
    serializer.WriteObject(ms, obj); 
    string jsonobj = Encoding.Default.GetString(ms.ToArray()); 
    ms.Dispose(); 
    return jsonobj; 
} 

alors je suis retourné le apposent Json à un stringbuilder et retourner au Jquery ajax method.The retourné Json ressemble à une chaîne, pas un objet et donc je suis incapable d'obtenir une valeur de paire de valeur clé Json ..

+0

Pourriez-vous poster ce qui est retourné lorsque vous appelez l'alerte (msg.d)? – user113716

+0

get firebug, placez un point d'arrêt et regardez les différentes valeurs dans la fenêtre de surveillance. Vérifiez ce qui est en post, msg [post]. –

+0

Salut Patrick, suivant est un exemple de ce qui est retourné quand je alerte (msg.d) [{"AnsNo": 0, "Réponse": "", "Catégorie": "Centre d'aide.Mortgages.Existant clients "," ClickURL ": null," ID ": 7," Question ":" Comment je vous réhypothèque? "," RecNo ": 0," ValidFrom ":" \/Date (-62135596800000 + 0000 "\ /", "ValidUntill": "\/Date (-62135596800000 + 0000) \ /"}] donc j'essaye avec msg [post] .AnsNo, msg [post] .Answer, msg [post] .Catégorie etc – kranthi

Répondre

1

Mise à jour:

Il ressemble vous doublez en série les données côté serveur, renvoyant une chaîne JSON qui est sérialisée en tant que JSON lui-même. Lorsque cela atteint le côté client et que jQuery désérialise automatiquement la première couche de JSON, il vous reste la chaîne JSON que vous avez créée manuellement.

Vous devez renvoyer le List<T> comme valeur de retour de votre méthode de service et laisser le framework gérer la sérialisation JSON.

Réponse d'origine:

En supposant que l'objet est toujours contenu dans ASP.NET AJAX's ".d" wrapper, comme vous avez laissé entendre:

for (var post in msg.d) {  
    var x = msg.d[post].Date; 

    alert(x); 
} 

Ou, une boucle traditionnelle, ce qui pourrait être plus simple:

for (var i = 0; i < msg.d.length; i++) { 
    var x = msg.d[i].Date; 

    alert(x); 
} 
+0

Merci Dave, après avoir lu votre message, j'ai réalisé que je suis en double sérialisation des données.such une erreur idiote.Maintenant, je suis capable de lire la valeur avec msg.d [0] .Date.Mais eu un autre problème.basiquement dans le code derrière la méthode web J'ai des conditions différentes. Basé sur la condition différente liste générique (ex.faqs, reconnaissances etc) est retourné à la méthode Jquery ajax.Je ne comprends pas comment puis-je définir le type de retour (liste générique) pour le Web méthode basée sur la condition en utilisant votre solution.Par auparavant, j'ai utilisé pour ajouter la chaîne retournée à partir de Converttojson à un stringbuilder et retour. – kranthi

+0

Utilisez IEnumerable comme type de retour. –

+0

Renvoyer IEnumerable ressemble à une excellente idée.Dans mon code, j'ai certaines conditions qui devront récupérer des données à partir de plusieurs listes génériques.Par exemple, si une condition est satisfaite, je dois faire ce qui suit. Recognitionfactory rf = new Recognitionfactory(); Reconnaissance rs = rf.getBasicSearchRecognitions (searchtext); Answerfactory af = new Answerfactory(); Réponses ans = af.getBasicSearchAnswers (searchtext); Dans le cas ci-dessus, je dois retourner les deux rs, ans (listes génériques) après avoir satisfait à une certaine condition. Comment puis-je retourner les deux pour une condition? – kranthi

1

Qu'en est-il du message, si vous ajoutez ceci à votre ajax cela aide-t-il?

dataFilter: function(data) 
      { 
       var msg; 
       if (typeof (JSON) !== 'undefined' && 
       typeof (JSON.parse) === 'function') 
        msg = JSON.parse(data); 
       else 
        msg = eval('(' + data + ')'); 
       if (msg.hasOwnProperty('d')) 
        return msg.d; 
       else 
        return msg; 
      }, 

Notez que vous traitez alors cela comme msg, pas MSG.D comme ceci:

success: function(msg) 
      { 
       SaveSuccess(msg); 
      }, 
0

Me semble que vous utilisez un tableau d'objets pour commencer, en utilisant votre échantillon les travaux suivants :

messages = [{"AnsNo":0,"Answer":"","Category":"Help Centre.Mortgages.Existing customers","ClickURL":null,"ID":7,"Question":"How do I re-mortgage to you?","RecNo":0,"ValidFrom":"\/Date(-62135596800000+0000)\/","ValidUntill":"\/Date(-62135596800000+0000)\/"}] 

for(i in messages) 
{ 
    message = messages[i]; 
    //Says "Help Centre.Mortgages.Existing customers" 
    alert(message.Category) 
    //To get all key/value pairs 
    for(key in message) 
    { 
     //Alerts all key value pairs one by one 
     alert("Key:" + key + ", Value:" + message[key]); 
    } 
} 
Questions connexes