2009-08-20 2 views
0

J'ai créé un service web C# qui récupère une table de données avec 2 colonnes, cette table de données est sérialisée en utilisant JavaScriptSerializer.Est-ce que ce JSON est correct et si oui comment parcourir chaque objet en JavaScript - Asp .Net 3.5

En utilisant Firebug, je vois le JSON suivant qui semble correct pour moi:

"{"d":"[{\"Text\":\"4 blah blah2\",\"Value\":\"16\"},{\"Text\":\"asdf\",\"Value\":\"15\"},{\"Text\":\"qwerty\",\"Value\":\"13\"}]"}" 

Sur le côté client, je reçois l'objet comme prévu à l'aide de cet appel:

$.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "../../Services/Filter.asmx/GetComboBoxContents", 
      data: '{ strFilter: "' + selText + '" }', 
      datatype: "json", 
      success: function(result) { onGetComboBoxOneContents(result); }, 
      fail: function(result) { alert(result); } 
     }); 

Comme attendu, la fonction onGetComboBoxOneContents (msg) est appelée, j'ai essayé de nombreuses façons, mais je suis incapable de résoudre les différents éléments. Voici la dernière version:

function onGetComboBoxOneContents(msg) { 
    var evalResult = eval("(" + msg + ")"); 

    var cbo = getComboFilterOneObject; 
    ClearComboBox(cbo); 

    for (var i = 0; i < evalResult.d.length; i++) { 
     AddToComboBox(cbo, evalResult.d[i].Value, evalResult.d[i].Text); 
    } 
} 

L'objectif de la fonction est d'analyser de la JSON chaque valeur et une paire de texte et l'envoyer à une fonction distincte. Comme j'utilise .Net 3.5, le d est attendu.

Toute aide est grandement appréciée.

EDIT: J'ai mis à jour le code côté client ci-dessous, mais msg.d [i] .Value et msg.d [i] .Text dans la boucle sont encore indéfinis.

function onGetComboBoxOneContents(msg) { 

    var cbo = getComboFilterOneObject; 
    ClearComboBox(cbo); 

    for (var i = 0; i < msg.d.length; i++) { 
     AddToComboBox(cbo, msg.d[i].Value, msg.d[i].Text); 
    } 
} 

EDIT: Je l'ai obtenu à travailler, mais il me faut encore utiliser eval, voici ma solution qui fonctionne pour moi:

function onGetComboBoxOneContents(msg) { 
    var evalResult = eval(msg.d); 

    var cbo = $("#" + getComboFilterOneObject); 
    ClearComboBox(cbo); 

    for (var i = 0; i < evalResult.length; i++) { 
     AddToComboBox(cbo, evalResult[i].Value, evalResult[i].Text); 
    } 
    cbo.initializeOptionList(); 
} 

Répondre

1

Puisque vous utilisez jQuery et en spécifiant le type du résultat en tant que json, vous n'avez pas besoin d'analyser ou d'évaluer quoi que ce soit, jQuery évaluera la réponse en toute sécurité en tant que JSON et retournera un objet JavaScript.

Sur votre rappel, vous pouvez accéder directement à l'objet, comme ceci:

function onGetComboBoxOneContents(msg) { 
    var cbo = getComboFilterOneObject; 
    ClearComboBox(cbo); 

    for (var i = 0; i < evalResult.d.length; i++) { 
     AddToComboBox(cbo, msg.d[i].Value, msg.d[i].Text); 
    } 
} 

Edit: Je vois quel est le problème maintenant, JavaScript est sensible à la casse, dans votre requête Ajax vous définissez la option type de données, pas de données T ype, qui est la raison pour laquelle jQuery est vous retourne une chaîne:

$.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "../../Services/Filter.asmx/GetComboBoxContents", 
      data: '{ strFilter: "' + selText + '" }', 
      dataType: "json", 
      success: function(result) { onGetComboBoxOneContents(result); }, 
      fail: function(result) { alert(result); } 
     }); 
+0

Merci, en utilisant le débogueur de FireBug, il me montre msg comme la chaîne complète, mais il dit msg.d est indéfini. J'ai modifié mon code pour qu'il corresponde au vôtre, à l'exception du changement d'evalResult dans la ligne for de msg. –

+0

J'ai corrigé la casse dans dataType et il semble que je suis plus proche, mais le débogueur signale toujours msg.d [i] .Value comme non défini. –

0

vous voudrez peut-être regarder ce tutoriel, comme CMS mentionné, jQuery fera le travail principal pour vous.

http://blog.reindel.com/2007/10/02/parse-json-with-jquery-and-javascript/

Si vous voulez faire vous-même l'analyse syntaxique, je ne suis pas un grand fan d'utiliser eval, mais préfèrent une certaine sécurité fournies par les bibliothèques trouvées à http://json.org/, si vous devez faire une analyse syntaxique de JSON sur la côté .net.

Si vous utilisez firebug, parcourez simplement votre boucle et regardez les valeurs des résultats de json. Le débogueur est la meilleure partie de firebug, IMO. :)

Questions connexes