2009-05-06 9 views
42

Ho un metodo web .NET che ho chiamato da jQuery. Il metodo restituisce alcuni markup HTML che visualizzo all'interno di un elemento DIV.Cosa significa .d in JSON?

Una volta che ho la risposta che ho utilizzare

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

La mia domanda è, cosa fa il .d fare? Non mi piace usare il codice che non capisco del tutto? Posso ottenere lo stesso risultato usando Eval?

+0

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

+0

related: http://stackoverflow.com/questions/2811525/removing-the-d-object-from- asp-net-web-service-json-output NB Ho cambiato la mia opinione sul mio VTC su questa domanda - questa domanda nonostante sia più recente è più focalizzata e ha risposte migliori –

risposta

22

Si riferisce ai Servizi dati ADO.NET?

Mi ricordo di aver ascoltato una presentazione su JSON restituendo questo e penso che sia solo un wrapper per assicuri che il payload sia un oggetto JSON rispetto a un array (che è il caso di restituire più entità).

Perché 'd' in particolare? Penso di ricordare che dicevano qualcosa come "beh doveva essere qualcosa".

+0

questo è vero, immagino che potrebbe essere a, b o c ma scelgono d (non c'è ragione per questo credo) solo una funzionalità di sicurezza che Microsoft ha aggiunto nella versione ASP.NET 3.5 + di ASP.NET AJAX incapsulando la risposta JSON all'interno di un oggetto padre. – Microtechie

+5

Penso 'd' per i dati – xr280xr

+3

C'è una ragione per sbarazzarsi di questo o cambiarlo? È sconvolgente avere così tanto JS a seconda di questo parametro casuale "d" che non controlli. Cosa succede se alcune versioni lo cambiano in "f"? – mmcrae

0

Restituisce il valore del campo denominato "d" nell'oggetto "result".

This question mostra un esempio di come potrebbe apparire il JSON, notare il campo d:.

0

Il d è parte del risultato restituito dal codice .NET. Se guardi questo codice dovresti vedere una variabile impostata con il nome d. Se viene generato da classi serializzate, probabilmente invia un membro di quella classe con il nome d.

+0

Il mio metodo restituisce semplicemente una stringa, ad es. ritorna "blablabla". Dov'è il set d? – Fermin

+1

È possibile modificare o eliminare la "d"? – mmcrae

0

Come altri hanno sottolineato, restituisce il membro dell'oggetto "result".
Se si voleva avere "d" in una variabile si potrebbe usare questo:

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

sulla base di questo tutorial: JSON Web Service And jQuery with Visual Studio 2008

Il metodo Web restituisce un prodotto che è serialize d in formato JSON. Poiché non esiste il tipo JSON, il valore restituito è un String con il formato JSON.

Sul lato client, la chiamata ajax restituisce un JSON.

Il risultato assomiglia {d: 'returned-string-with-JSON-format'}

Più esattamente qualcosa di simile: {d:'{"ID":123,"Name":"Surface Pro 2"}'}

Nota che 'returned-string-with-JSON-format' è un non stringa di un oggetto JSON in modo da non può fare result.d.ID.

Invece è necessario convertirlo in oggetto JSON utilizzando JSON.parse(result.d) o eval(result.d)

Alla fine, ciò che si vuole veramente è fare questo:

result = JSON.parse(result.d) 

UPDATE Considera anche questa demo, dove uso un JSON in formato stringa e lo converto in oggetto JSON:

enter image description here

+3

È possibile modificare o eliminare la "d"? – mmcrae

+0

@mmcrae Sì, è possibile scrivere direttamente in risposta. Ecco la guida: https://stackoverflow.com/a/25263102/1252036 –

2

ASPX Codice Qui:

<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# Codice Qui:.

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

È sempre utile aggiungere alcune spiegazioni al codice – Bowdzone

0

La sua è molto chiaro che $ ("#") div html (result.d); nel codice

"risultato" è un oggetto ed è di proprietà di "risultato".

Let spiegare,

se si crea oggetto come questo,

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

se accedere alla proprietà di risultato è che l'utilizzo di jQuery

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

così abbiamo ottenere il risultato in html è

<html>day</html>