Asp.net JSON中的.d是什么意思?
我有一个从jQuery调用的.NETWebMethod。该方法返回我在DIV元素中显示的一些HTML标记 一旦我得到了我使用的响应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的变量被设置。如果它是从序列化类生成的,那么它可能会发送
$("#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”参数,而您无法控制它。什么