【问题标题】:What does .d in JSON mean?JSON 中的 .d 是什么意思?
【发布时间】:2010-10-24 05:26:19
【问题描述】:

我有一个从 jQuery 调用的 .NET webmethod。该方法返回一些我在 DIV 元素中显示的 HTML 标记。

一旦我得到响应,我就会使用

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

我的问题是,.d 有什么作用?我不喜欢使用我不完全理解的代码?我可以使用 Eval 获得相同的结果吗?

【问题讨论】:

标签: asp.net jquery ajax json


【解决方案1】:

您指的是 ADO.NET 数据服务吗?

我记得听过一个关于 JSON 返回 this 的演示,我认为它只是一个包装器,用于确保有效负载是 JSON 对象,而不是数组(返回多个实体的情况) .

为什么是“d”?我想我记得他们说过类似“嗯,它必须是某种东西”之类的话。

【讨论】:

  • 没错,我猜它可能是 a 、 b 或 c 但他们选择 d (我猜这没有任何原因)只是微软在 ASP.NET 3.5 + 版本的 ASP 中添加的安全功能。 NET AJAX 通过将 JSON 响应封装在父对象中。
  • 我认为'd'代表数据
  • 有理由摆脱或改变它吗?取决于这个你无法控制的随机“d”参数,拥有如此多的 JS 令人不安。如果某个版本将其更改为“f”怎么办?
  • @mmcrae 一年后,我也有同样的担忧,有什么更新吗?你发现了吗?
  • @NicoBerrogorry - 我编写的带有result.d 的代码仍在生产环境中运行和工作shrug。我想这只是使用 Web 表单 Web 结果端点进行 AJAX 调用的一部分。我认为 OP 问题下 cmets 中的“相关”链接有助于讨论 .d 的来源。 --- 像往常一样,要是有更好的文档就好了……
【解决方案2】:

基于本教程:JSON Web Service And jQuery with Visual Studio 2008

Web 方法返回一个以 JSON 格式序列化的产品。由于不存在JSON 类型,因此返回值为JSON 格式的String

在客户端,ajax 调用返回一个 JSON。

结果看起来像{d: 'returned-string-with-JSON-format'}

更确切地说是:{d:'{"ID":123,"Name":"Surface Pro 2"}'}

请注意,'returned-string-with-JSON-format' 是字符串而不是 JSON 对象,因此您不能使用result.d.ID

相反,您需要使用 JSON.parse(result.d)eval(result.d) 将其转换为 JSON 对象

最后,你真正想要的是这样做:

result = JSON.parse(result.d)

更新 还可以考虑这个演示,我使用字符串格式的 JSON 并将其转换为 JSON 对象:

【讨论】:

【解决方案3】:

此处为 ASPX 代码:

<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#代码在这里:

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

    }

【讨论】:

  • 在代码中添加一些解释总是有帮助的
  • 我为什么要读这个?它是问题的答案、解释还是示例?
【解决方案4】:

对于那些想要真正从头开始学习有关包装类的示例的人来说可能是非常有用的链接,其中一个类中的细节永远不会泄露给其他类,但可以通过各种方法间接访问 http://www.c-sharpcorner.com/Blogs/12038/wrapper-class-in-C-Sharp.aspx

【讨论】:

    【解决方案5】:

    它返回对象'result'中名为'd'的字段的值。

    This question 显示了 JSON 的外观示例,请注意 d: 字段。

    【讨论】:

      【解决方案6】:

      d 是 .NET 代码返回的结果的一部分。如果您查看此代码,您应该会看到一个名为 d 的变量。如果它是从序列化的类生成的,那么它可能会发送该类的一个名为 d 的成员。

      【讨论】:

      • 我的方法只返回一个字符串,例如返回“blablabla”。 d 集在哪里?
      • 是否可以改变或去掉“d”?
      【解决方案7】:

      正如其他人所指出的,它返回 "result" 对象的 "d" 成员。
      如果你想在变量中包含"d",你可以使用这个:

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

      【讨论】:

        【解决方案8】:

        很明显 $("#div").html(result.d);在你的代码中

        “result”是一个对象,d是“result”的属性。

        解释一下,

        如果你创建这样的对象,

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

        如果我们访问result的属性就是使用jquery

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

        所以我们在 html 中得到的结果是

        <html>day</html>
        

        【讨论】:

          【解决方案9】:

          有一次,我的朋友告诉我,“d”代表 ajax 作为回报的响应中的“数据”(因为响应可以包含的不仅仅是简单的数据)。

          也许是,也许不是,但你仍然可以接受它。 :)

          【讨论】:

          猜你喜欢
          • 2013-07-16
          • 1970-01-01
          • 2019-12-05
          • 2020-06-26
          • 2017-01-18
          • 1970-01-01
          • 1970-01-01
          • 2016-04-22
          相关资源
          最近更新 更多