好的,它是星期五下午晚些时候,我一直在争取太长时间......我有一个返回JSON的MVC2类。尝试在浏览器中反序列化时,JQuery会抛出错误。
这是控制器:
<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
以下是视图模型:
Public Class TestViewModel
Public Property Address1 As String
End Class
这是剧本:
// 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 Music Store示例。执行时,JQuery在get_data上抛出异常,说“对象不支持此属性或方法”。好的,所以我尝试评论该行并尝试反序列化(结果)。然后异常说“Sys.ArgumentException:无法反序列化。数据与有效的JSON不对应。参数名称:数据”。
我哪里错了?
答案 0 :(得分:2)
您不需要显式解析(“反序列化”)您的JSON! jQuery会尝试自动执行此操作,前提是它可以正确猜出返回的dataType
。当然,您可以指定您期望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!");
}
});
那就是说 - 可能是XHR没有返回有效的JSON。您是否可以提供返回到jQuery success
回调的JSON示例?