我有一个.NET网络方法,我从jQuery调用。该方法返回一些我在DIV元素中显示的HTML标记。
我收到回复后
$("#div").html(result.d);
我的问题是,.d有什么作用?我不喜欢使用我不完全理解的代码?我可以使用Eval获得相同的结果吗?
答案 0 :(得分:23)
您指的是ADO.NET数据服务吗?
我记得听过关于JSON返回此内容的演示文稿,我认为它只是确保有效内容是JSON对象而不是数组(返回多个实体的情况)的包装器
为什么'd'具体?我想我记得他们说'好吧它必须是某种东西'。
答案 1 :(得分:8)
基于本教程:JSON Web Service And jQuery with Visual Studio 2008
Web方法返回以JSON格式序列化的Product。由于没有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)
最后,你真正想要的是这样做:
result = JSON.parse(result.d)
<强>更新强> 还要考虑这个演示,我在字符串格式中使用JSON并将其转换为JSON对象:
答案 2 :(得分:1)
对于那些想要真正从头学习一个关于包装类的例子的人来说可能是非常有用的链接,其中一个类中的细节永远不会被释放到其他类但可以通过各种方法间接访问 http://www.c-sharpcorner.com/Blogs/12038/wrapper-class-in-C-Sharp.aspx
答案 3 :(得分:1)
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 :(得分:0)
它返回对象“d
”中名为“result
”的字段的值。
This question显示了JSON的外观示例,请注意d:
字段。
答案 5 :(得分:0)
d是.NET代码返回的结果的一部分。如果查看此代码,您应该看到一个名为d的变量。如果它是从序列化类生成的,那么它可能沿着该类的成员发送名为d。
答案 6 :(得分:0)
正如其他人所指出的那样,它会返回"d"
对象的"result"
成员
如果您想在变量中使用"d"
,可以使用它:
var property = "d";
var value = result[property];
答案 7 :(得分:0)
很清楚$(“#div”)。html(result.d);在你的代码中
“result”是一个对象,d是“result”的属性。
让我们解释一下,
如果您创建这样的对象,
<LinearLayout
android:id="@+id/sigpanel"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/button_panel"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:layout_alignParentStart="true"
android:gravity="center"
android:baselineAligned="false"
android:background="@drawable/customborder"
android:orientation="vertical">
<TextView
android:id="@+id/tv_Signature"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Signature"
android:layout_gravity="center"
android:textColor="#002060" />
</LinearLayout>
如果我们访问结果的属性是使用jquery
var result{"id": "number", "d": "day"};
所以我们得到html的结果是
$("#div").html(result.d);
答案 8 :(得分:-1)
一次,我的朋友告诉我,“ d”代表ajax返回的响应中的“数据”(因为响应中不仅可以包含简单数据,还可以包含更多内容)。
也许是,也许不是,但是您仍然可以接受它。 :)