2009-05-06 18 views
42

Mam metodę internetową .NET, którą wywołałem z jQuery. Metoda zwraca niektóre znaczniki HTML, które wyświetlam w elemencie DIV.Co oznacza .d w języku JSON?

Raz mam odpowiedź Używam

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

Moje pytanie jest, co robi .d zrobić? Nie lubię używać kodu, którego nie rozumiem w pełni? Czy mogę uzyskać ten sam wynik za pomocą Eval?

+0

powiązane: http: // stackov erflow.com/questions/739859/returning-html-from-json-webservice-what-is-the-d –

+0

powiązane: http://stackoverflow.com/questions/2811525/removing-the-d-object-from- asp-net-web-service-json-output NB Zmieniłem zdanie na temat mojego VTC na to pytanie - to pytanie, mimo że jest nowsze, jest bardziej skupione i ma lepsze odpowiedzi –

Odpowiedz

22

Czy odwołujesz się do usług danych ADO.NET?

Pamiętam wysłuchaniu prezentacji o JSON powrocie to i myślę, że jej po prostu otoki do zapewnić ładunek jest obiekt JSON w przeciwieństwie do tablicy (co ma miejsce w przypadku wielu podmiotów powrocie).

Dlaczego "d" konkretnie? Myślę, że pamiętam, jak mówili coś w stylu "dobrze, że to musi być coś".

+0

To prawda, myślę, że to może być a, b lub c, ale oni wybierają d (nie ma powodu za tym myślę) po prostu funkcja bezpieczeństwa, którą Microsoft dodał w ASP.NET 3.5 + wersja ASP.NET AJAX przez hermetyzację odpowiedzi JSON w obrębie obiektu nadrzędnego. – Microtechie

+5

Myślę, że "d" dla danych – xr280xr

+3

Czy istnieje powód, aby się go pozbyć lub zmienić? Niepokojące jest posiadanie tak dużej ilości JS w zależności od tego losowego parametru "d", którego nie kontrolujesz. Co się stanie, jeśli jakaś wersja zmieni ją na "f"? – mmcrae

0

Powoduje zwrócenie wartości pola o nazwie "d" w obiekcie "result".

This question pokazuje przykład, w jaki sposób JSON może wyglądać, zwróć uwagę na pole d:.

0

Symbol d jest częścią wyniku zwróconego przez kod .NET. Jeśli spojrzysz na ten kod, powinieneś zobaczyć zmienną o nazwie d. Jeśli jest generowany z klas serializowanych, prawdopodobnie wysyła element członkowski tej klasy o nazwie d.

+0

Moja metoda właśnie zwraca ciąg, np. zwróć "blablabla". Gdzie jest ustawiony d? – Fermin

+1

Czy można zmienić lub pozbyć się litery "d"? – mmcrae

0

Jak zauważyli inni, zwraca ona element "d" obiektu "result".
Jeśli chcesz mieć "d" w zmiennej można użyć to:

var property = "d"; 
var value = result[property]; 
7

oparte na tym tutorialu: JSON Web Service And jQuery with Visual Studio 2008

Metoda Web zwraca produkt, który jest serialize d w formacie JSON. Ponieważ nie ma typu JSON, zwróconą wartością jest String z formatem JSON.

Po stronie klienta wywołanie ajax zwraca JSON.

Wynik wygląda {d: 'returned-string-with-JSON-format'}

Bardziej dokładnie coś takiego: {d:'{"ID":123,"Name":"Surface Pro 2"}'}

Zauważ, że 'returned-string-with-JSON-format' to nie łańcuch obiekt JSON więc nie może zrobić result.d.ID.

Zamiast tego trzeba konwertować go do obiektu JSON za pomocą JSON.parse(result.d) lub eval(result.d)

Na koniec, co naprawdę chcesz jest to zrobić:

result = JSON.parse(result.d) 

UPDATE również pod uwagę to demo, gdzie używam JSON w formacie smyczkowym i konwertuję go na obiekt JSON:

enter image description here

+3

Czy można zmienić lub pozbyć się litery "d"? – mmcrae

+0

@mmcrae Tak, możliwe jest bezpośrednie pisanie do odpowiedzi. Oto przewodnik: https://stackoverflow.com/a/25263102/1252036 –

2

ASPX kod tutaj:

<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# kod tutaj:.

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

Zawsze pomocne jest dodanie objaśnień do kodu – Bowdzone

0

Jest to bardzo oczywiste, że $ ("# div") html (result.d); w kodzie

"wynik" to obiekt, a d jest właściwością "wyniku".

Niech wyjaśnić,

jeśli utworzyć obiektu takiego,

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

jeśli mamy dostęp własność Powoduje to, że przy użyciu jquery

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

więc otrzymujemy wynik w HTML

<html>day</html>