Asp.net mvc 如何使用JQuery从MVC反序列化JSON?
好吧,现在是周五下午晚些时候,我已经为此奋斗了太久。。。我有一个返回JSON的MVC2类。JQuery在浏览器中尝试反序列化时抛出错误 这是控制器:Asp.net mvc 如何使用JQuery从MVC反序列化JSON?,asp.net-mvc,json,jquery,Asp.net Mvc,Json,Jquery,好吧,现在是周五下午晚些时候,我已经为此奋斗了太久。。。我有一个返回JSON的MVC2类。JQuery在浏览器中尝试反序列化时抛出错误 这是控制器: <HttpPost()> Function ChangeAddress(ByVal addressId As Integer) As ActionResult ' Build and return JSON containing address. Dim v As New TestViewModel With {.Ad
<HttpPost()>
Function ChangeAddress(ByVal addressId As Integer) As ActionResult
' Build and return JSON containing address.
Dim v As New TestViewModel With {.Address1 = "My House"}
Return Json(v)
End Function
下面是脚本:
// If list is not empty and item was found...
if (found == true) {
var sum = 14;
// Get fields of newly selected address.
$.ajax({
url: '../../Checkout/ChangeAddress',
type: 'POST',
traditional: true,
data: { addressId: sum },
success: function (result) {
var json = result.get_data();
var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
alert("Success!");
}
});
};
反序列化代码来自MVC音乐商店示例。在执行时,JQuery对get_数据抛出异常,表示“对象不支持此属性或方法”。好的,所以我试着注释掉这一行并尝试反序列化(结果)。然后异常显示“Sys.ArgumentException:无法反序列化。数据与有效的JSON不对应。参数名称:data”
我哪里出错了?您不需要显式解析(“反序列化”)您的JSON!jQuery将尝试自动执行此操作,前提是它能够正确猜测返回的
数据类型。当然,您可以指定您期望的是JSON:
$.ajax({
url: '../../Checkout/ChangeAddress',
type: 'POST',
dataType: 'JSON', // <========== this line
traditional: true,
data: {addressId: sum},
success: function (result) {
var json = result.get_data();
var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
alert("Success!");
}
});
$.ajax({
url:“../Checkout/ChangeAddress”,
键入:“POST”,
dataType:'JSON',//好吧,我不得不笑了。da'ya知道,我可以直接读取Address1值,而无需显式解析。作为MVC的新手,我觉得所有这些automagic的东西都很好,但也有点令人不安。规则书(药剂书)在哪里这就解释了神奇之处?感谢您的快速响应。@Adventure:从开始,特别是dataType
选项。
$.ajax({
url: '../../Checkout/ChangeAddress',
type: 'POST',
dataType: 'JSON', // <========== this line
traditional: true,
data: {addressId: sum},
success: function (result) {
var json = result.get_data();
var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
alert("Success!");
}
});