Asp.net JSON中的.d是什么意思?

Asp.net JSON中的.d是什么意思?,asp.net,jquery,ajax,json,Asp.net,Jquery,Ajax,Json,我有一个从jQuery调用的.NETWebMethod。该方法返回我在DIV元素中显示的一些HTML标记 一旦我得到了我使用的响应 $("#div").html(result.d); 我的问题是.d做什么?我不喜欢使用我不完全理解的代码?使用Eval可以得到相同的结果吗?它返回对象'result'中名为'd'的字段的值 显示了JSON的外观示例,请注意d:字段。d是.NET代码返回的结果的一部分。如果您查看这段代码,您应该会看到一个名为d的变量被设置。如果它是从序列化类生成的,那么它可能会发送

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

一旦我得到了我使用的响应

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

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

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


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

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

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

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


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

正如其他人所指出的,它返回
“result”
对象的
“d”
成员。
如果希望在变量中包含
“d”
,可以使用:

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

对于那些想从头开始学习包装器类的人来说,这可能是一个非常有用的链接,在这个示例中,一个类中的细节永远不会转移到另一个类中,而是可以通过各种方法间接访问

基于本教程:

Web方法返回以JSON格式序列化的产品。由于没有
JSON
类型,因此返回的值是一个JSON格式的
字符串

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

结果看起来像
{d:'返回的字符串格式为JSON'}

更确切地说,类似于:
{d:'{“ID”:123,“Name”:“Surface Pro 2”}}

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

相反,您需要使用
JSON.parse(result.d)
eval(result.d)

最后,您真正想做的是:

result = JSON.parse(result.d)
更新 还考虑这个演示,在这里我使用一个字符串格式的JSON,并将其转换成JSON对象:

此处的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>
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;
        }

    }

函数GetData()
{
警惕(“我被叫”);
$.ajax({
类型:“POST”,
url:“Contact.aspx/GetProducts”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(结果){
var data=JSON.parse(result.d)
警报(data.Id);
},
错误:函数(ex)
{
警报(“测试”);
}
});
}
C#代码如下:

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

    }
公共部分类联系人:第页
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
BindList();
}
int[]arr1=新的int[]{1,2};
ListBox1.SelectedValue=“1”;
ListBox1.SelectedValue=“4”;
}
void BindList()
{
List lst=新列表()
{
新产品{Id=1,Name=“Photo”},
新产品{Id=2,Name=“Photo”},
新产品{Id=3,Name=“Photo”},
新产品{Id=4,Name=“Photo”}
};
ListBox1.DataSource=lst;
ListBox1.DataTextField=“Name”;
ListBox1.DataValueField=“Id”;
ListBox1.DataBind();
}
[网络方法]
公共静态字符串GetProducts()
{
//实例化序列化程序
JavaScriptSerializer TheSerializer=新的JavaScriptSerializer();
//可选:您可以创建自己的自定义转换器
//RegisterConverters(新的JavaScriptConverter[]{new MyCustomJson()});
//var products=context.GetProducts().ToList();
Product products=new Product(){Id=1,Name=“Testing Services”};
var TheJson=TheSerializer.Serialize(产品);
返回JSON;
}
}
很明显,$(“#div”).html(result.d);在代码中

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

让我们解释一下

如果创建这样的对象

var result{"id": "number", "d": "day"};
如果我们访问result的属性,那么使用jquery

$("#div").html(result.d);
所以我们在html中得到的结果是

<html>day</html>

有一次,我的朋友告诉我,“d”表示ajax从响应中得到的“数据”(因为响应可以包含很多不仅仅是简单的数据)


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

我的方法只返回一个字符串,例如返回“blabla”。d集在哪里?是否有可能更改或去除“d”?相关:相关:注意:我已经改变了对我的职业训练局在这个问题上的看法-这个问题虽然较新,但更集中,有更好的答案。这总是有助于为你的代码添加一些解释。我为什么要读这个?这是问题的答案、解释或例子吗?没错,我想可能是a、b或c,但他们选择了d(我想这背后没有理由)这只是微软在ASP.NET 3.5+版本的ASP.NET AJAX中通过将JSON响应封装在父对象中而添加的一项安全功能。我认为数据的“d”是否有理由消除或更改它?让人不安的是,有这么多JS依赖于这个随机的“d”参数,而您无法控制它。什么