webentwicklung-frage-antwort-db.com.de

Was bedeutet .d in JSON?

Ich habe eine .NET-Webmethode, die ich von jQuery aufgerufen habe. Die Methode gibt einige HTML-Markierungen zurück, die ich in einem DIV-Element anzeigt.

Sobald ich die Antwort habe, benutze ich 

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

Meine Frage ist, was macht die .d? Ich mag es nicht, Code zu verwenden, den ich nicht ganz verstehe. Könnte ich mit Eval dasselbe Ergebnis erzielen?

45
Fermin

Verweisen Sie auf die ADO.NET Data Services?

Ich erinnere mich, wie ich eine Präsentation über die JSON gehört habe, die dies zurückgibt, und ich denke, es ist nur ein Wrapper für stellt sicher, dass es sich bei der Nutzlast um ein JSON-Objekt handelt im Gegensatz zu einem Array (bei dem mehrere Entitäten zurückgegeben werden).

Warum speziell? Ich glaube, ich erinnere mich, dass sie so etwas sagten: "Nun, es musste etwas sein".

23
Clinton

Basierend auf diesem Tutorial: JSON-Webservice und jQuery mit Visual Studio 2008

Die Webmethode gibt ein Produkt zurück, das im JSON-Format serialisiert ist. Da es keinen JSON-Typ gibt, ist der zurückgegebene Wert eine String mit JSON-Format. 

Auf der Clientseite gibt der Ajax-Aufruf eine JSON zurück. 

Das Ergebnis sieht aus wie {d: 'returned-string-with-JSON-format'} 

Genauer gesagt etwas wie: {d:'{"ID":123,"Name":"Surface Pro 2"}'}

Beachten Sie, dass 'returned-string-with-JSON-format' eine Zeichenfolge und kein JSON-Objekt ist. Sie können nichtresult.d.ID ausführen.

Stattdessen müssen Sie es mithilfe von JSON.parse(result.d) oder eval(result.d) in ein JSON-Objekt konvertieren.

Am Ende möchten Sie Folgendes tun:

result = JSON.parse(result.d)

UPDATE Beachten Sie auch diese Demo, bei der ich eine JSON im String-Format verwende und in ein JSON-Objekt konvertiere:

enter image description here

8
Jaider

ASPX-Code hier:

<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>

C # -Code hier:

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

dies kann ein nützlicher Link für diejenigen sein, die ein Beispiel für eine Wrapper-Klasse von Grund auf lernen möchten, bei dem die Details in einer Klasse niemals für eine andere Klasse freigegeben werden können, sondern indirekt über verschiedene Methoden zugänglich sind . http://www.c-sharpcorner.com/Blogs/12038/wrapper-class-in-C-Sharp.aspx

1
clarifier

Es ist sehr klar, dass $ ("# div"). Html (result.d); in Ihrem Code

"result" ist ein Objekt und d ist die Eigenschaft von "result".

Erklären lassen,

wenn Sie ein Objekt wie dieses erstellen,

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

wenn wir auf die Eigenschaft von result zugreifen, ist das mit jquery

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

so erhalten wir result in html ist 

<html>day</html>
0
user4977136

Es gibt den Wert des Felds 'd' im Objekt 'result' zurück.

Diese Frage zeigt ein Beispiel, wie JSON aussehen könnte. Beachten Sie das d:-Feld.

0
unwind

Das d ist Teil des Ergebnisses, das von Ihrem .NET-Code zurückgegeben wird. Wenn Sie sich diesen Code ansehen, sollten Sie eine Variable mit dem Namen d sehen. Wenn es aus serialisierten Klassen generiert wird, sendet es wahrscheinlich ein Mitglied dieser Klasse mit dem Namen d mit.

0
Marius

Wie bereits erwähnt, gibt es das "d"-Mitglied des "result"-Objekts zurück.
Wenn Sie "d" in einer Variablen haben möchten, können Sie Folgendes verwenden:

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