2009-05-06 14 views
42

Tengo un .NET webmethod al que he llamado desde jQuery. El método devuelve un marcado HTML que se muestra dentro de un elemento DIV.¿Qué significa .d en JSON?

Una vez que haya la respuesta que utilizar

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

Mi pregunta es, ¿qué hace el .d? No me gusta usar el código que no entiendo completamente? ¿Podría obtener el mismo resultado usando Eval?

+0

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

+0

relacionado: http://stackoverflow.com/questions/2811525/removing-the-d-object-from- asp-net-web-service-json-output NB He cambiado mi opinión sobre mi VTC en esta pregunta: esta pregunta, a pesar de ser más reciente, está más centrada y tiene mejores respuestas –

Respuesta

22

¿Te refieres a los servicios de datos ADO.NET?

Recuerdo haber escuchado una presentación sobre el retorno de JSON y creo que es solo un contenedor para asegurar que la carga sea un objeto JSON en lugar de una matriz (que es el caso de devolver varias entidades).

¿Por qué 'd' específicamente? Creo que los recuerdo diciendo algo como 'bueno, tenía que ser algo'.

+0

eso es verdad, supongo que podría ser una, boc pero eligen d (no hay razón detrás de esto, supongo) solo una característica de seguridad que Microsoft agregó en ASP.NET 3.5 + versión de ASP.NET AJAX al encapsular la respuesta JSON dentro de un objeto padre. – Microtechie

+5

Creo que 'd' for data – xr280xr

+3

¿Hay alguna razón para deshacerse de esto o cambiarlo? Es perturbador tener tanto JS dependiendo de este parámetro aleatorio "d" que no controlas. ¿Qué pasa si alguna versión lo cambia a "f"? – mmcrae

0

Devuelve el valor del campo denominado 'd' en el objeto 'result'.

This question muestra un ejemplo de cómo podría verse el JSON, observe el campo d:.

0

La d es parte del resultado devuelto por su código .NET. Si miras este código, deberías ver una variable con el nombre d. Si se genera a partir de clases serializadas, probablemente envíe un miembro de esa clase con el nombre d.

+0

Mi método simplemente devuelve una cadena, por ejemplo devolver "blablabla". ¿Dónde está el d establecido? – Fermin

+1

¿Es posible cambiar o deshacerse de la "d"? – mmcrae

0

Como han señalado otros, devuelve el miembro "d" del objeto "result".
Si quería tener "d" en una variable que podría utilizar esto:

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

Basado en este tutorial: JSON Web Service And jQuery with Visual Studio 2008

El método web devuelve un producto que es serializar d en formato JSON. Como no existe el tipo JSON, el valor devuelto es String con formato JSON.

En el lado del cliente, la llamada ajax devuelve un JSON.

El resultado se parece a {d: 'returned-string-with-JSON-format'}

Más exactamente algo como: {d:'{"ID":123,"Name":"Surface Pro 2"}'}

Tenga en cuenta que no es 'returned-string-with-JSON-format' una cadena de un objeto JSON para que no puede hacer result.d.ID.

su lugar usted necesita para convertirlo en objeto JSON utilizando JSON.parse(result.d) o eval(result.d)

Al final, lo que realmente quiere es hacer esto:

result = JSON.parse(result.d) 

ACTUALIZACIÓN Ten en cuenta también esta demo, donde uso un JSON en formato de cadena y lo convierto en objeto JSON:

enter image description here

+3

¿Es posible cambiar o eliminar la "d"? – mmcrae

+0

@mmcrae Sí, es posible escribiendo directamente a Response. Aquí está la guía: https://stackoverflow.com/a/25263102/1252036 –

2

Código ASPX aquí:

<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# código aquí:.

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

Siempre es útil agregar alguna explicación a su código – Bowdzone

0

Su es muy claro que $ ("#") div html (result.d); en su código

"resultado" es un objeto yd es propiedad de "resultado".

Vamos a explicar,

si crea objeto como éste,

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

si accedemos a la propiedad de resultado es que el uso de jQuery

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

por lo que obtener el resultado en html es

<html>day</html>