web-dev-qa-db-fra.com

Que signifie .d en JSON?

J'ai une méthode web .NET que j'ai appelée à partir de jQuery. La méthode retourne du balisage HTML que j'affiche dans un élément DIV.

Une fois que j'ai la réponse que j'utilise 

$("#div").html(result.d);

Ma question est la suivante: que fait le .d? Je n'aime pas utiliser du code que je ne comprends pas bien? Pourrais-je obtenir le même résultat en utilisant Eval?

45
Fermin

Faites-vous référence à ADO.NET Data Services?

Je me souviens d’avoir entendu une présentation sur le retour de JSON par le JSON et je pense que c’est juste un wrapper pour s’assurer que la charge utile est un objet JSON par opposition à un tableau (ce qui est le cas du retour de plusieurs entités).

Pourquoi 'd' spécifiquement? Je pense que je me souviens d’avoir dit quelque chose du genre «ça devait être quelque chose».

23
Clinton

Basé sur ce tutoriel: Service Web JSON et jQuery avec Visual Studio 2008

La méthode Web renvoie un produit sérialisé au format JSON. Puisqu'il n'y a pas de type JSON, la valeur renvoyée est une String au format JSON. 

Du côté client, l'appel ajax renvoie un JSON. 

Le résultat ressemble à {d: 'returned-string-with-JSON-format'} 

Plus exactement quelque chose comme: {d:'{"ID":123,"Name":"Surface Pro 2"}'}

Notez que 'returned-string-with-JSON-format' est une chaîne et non un objet JSON. Par conséquent, vous ne pouvez pas faire result.d.ID.

Au lieu de cela, vous devez le convertir en objet JSON à l'aide de JSON.parse(result.d) ou eval(result.d).

À la fin, vous voulez vraiment faire ceci:

result = JSON.parse(result.d)

UPDATE Prenez également en compte cette démo, dans laquelle j'utilise un JSON au format chaîne et le convertis en objet JSON:

enter image description here

8
Jaider

Code ASPX ici:

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <script type="text/javascript">


        function GetData()
        {
            alert("I am called");
                $.ajax({
                    type: "POST",
                    url: "Contact.aspx/GetProducts",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (result) {


                       var data = JSON.parse(result.d)
                       alert(data.Id);

                    },
                    error:function(ex)
                    {
                        alert("Test");
                    }
                });
        }
    </script>

     <asp:TextBox ID="txtName" runat="server"></asp:TextBox>

    <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="GetData();" />
</asp:Content>

Code C # ici:

public partial class Contact : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindList();
            }
            int[] arr1 = new int[] { 1, 2 };
            ListBox1.SelectedValue = "1";
            ListBox1.SelectedValue = "4";


        }

        void BindList()
        {

            List<Product> lst = new List<Product>()
            {
                new Product{Id=1,Name="Photo"},
                new Product{Id=2,Name="Photo"},
                new Product{Id=3,Name="Photo"},
                new Product{Id=4,Name="Photo"}
            };
            ListBox1.DataSource = lst;
            ListBox1.DataTextField = "Name";
            ListBox1.DataValueField = "Id";
            ListBox1.DataBind();
        }


        [WebMethod]
        public static string GetProducts()
        {
            // instantiate a serializer
            JavaScriptSerializer TheSerializer = new JavaScriptSerializer();

            //optional: you can create your own custom converter
           // TheSerializer.RegisterConverters(new JavaScriptConverter[] { new MyCustomJson() });

            //var products = context.GetProducts().ToList();
            Product products = new Product() { Id = 1, Name = "Testing Services" };
            var TheJson = TheSerializer.Serialize(products);

            return TheJson;
        }

    }
1
Ramdas Chavan

peut être un lien très utile pour ceux qui veulent vraiment apprendre de zéro un exemple sur la classe wrapper où les détails d’une classe ne peuvent jamais être divisés en une autre classe mais peuvent être consultés indirectement de différentes façons http: // www.c-sharpcorner.com/Blogs/12038/wrapper-class-in-C-Sharp.aspx

1
clarifier

Il est très clair que $ ("# div"). Html (result.d); dans votre code

"result" est un objet et d est la propriété de "result".

Laisse expliquer,

si vous créez un objet comme celui-ci,

var result{"id": "number", "d": "day"};

si on accède à la propriété du résultat, c'est que jquery est utilisé

$("#div").html(result.d);

donc nous obtenons le résultat en HTML est 

<html>day</html>
0
user4977136

Il retourne la valeur du champ nommé 'd' dans l'objet 'result'.

Cette question montre un exemple de l'apparence du JSON, remarquez le champ d:.

0
unwind

Le d fait partie du résultat renvoyé par votre code .NET. Si vous regardez ce code, vous devriez voir une variable définie avec le nom d. S'il est généré à partir de classes sérialisées, il envoie probablement un membre de cette classe portant le nom d.

0
Marius

Comme d'autres l'ont fait remarquer, il retourne le membre "d" de l'objet "result".
Si vous voulez avoir "d" dans une variable, vous pouvez utiliser ceci:

var property = "d";
var value = result[property];
0
Greg