我创建了一个HTML文件,它会尝试将json值传递给我的asp页面,但是我的asp出错了。我的HTML工作正常并传递值{'a':'a','b':'b'},但asp页面无法使用该值。
这是我的HTML代码并显示JSON值{'a':'a','b':'b'}:
<html>
<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#btnAdd').click(function() {
var json_obj = "{'" + $('#t1').val() + "' : '" + $('#p1').val() + "','" + $('#t2').val() + "' : '" + $('#p2').val() + "'}";
$.ajax({
type: 'POST',
url: 'http://localhost/Base_Data/InsertItem.aspx',
contentType: 'application/json; charset=utf-8',
data: json_obj,
dataType: 'json',
success: function(msg) {
alert('Success!');
},
error: function(msg) {
alert('Error!');
}
});
});
});
</script>
</head>
<body>
<div>
Type: 1: <input type="text" id="t1" />
Property 1: <input type="text" id="p1" />
Type 2: <input type="text" id="t2" />
Property 2: <input type="text" id="p2" />
<input type="button" id="btnAdd" value="Add object!" />
</div>
</body>
</html>
这是我的ASP页面代码:
public class Test
{
public Test(string json)
{
var serializer = new JavaScriptSerializer();
var result = serializer.DeserializeObject(json);
var first = int.Parse(result["t1"]);
var second = int.Parse(result["t2"]);
}
public string first { get; set; }
public string second { get; set; }
}
任何回复都将受到高度赞赏。提前谢谢!
答案 0 :(得分:0)
将数据传递给$.ajax
方法时,data
参数通常是具有键/值对的javascript对象,并且这些键/值对被放入查询字符串中,如{{1} }。将JSON字符串放在那里,然后尝试在服务器中解析该JSON是向服务器发送几个值的难点,并且在服务器上解析它也需要做更多的工作。
使用foo=bar&person=ted
方法的内置数据功能会将数据放入查询字符串格式,您的服务器也可以自动解析 - 无需在客户端或服务器上编写任何新代码。
来自jQuery docs:
数据
要发送到服务器的数据。它被转换为查询字符串, 如果还不是一个字符串。它附加到GET请求的URL。 请参阅processData选项以防止此自动处理。宾语 必须是键/值对。如果value是一个数组,jQuery序列化 具有相同键的多个值基于传统的值 设置(如下所述)。
答案 1 :(得分:0)
我会避免手动生成纯JSON,因为它总是会导致问题,尝试使用像JSON.stringify之类的东西,这将使您的数据构建更容易,因为您可以使用正确的JS对象,例如。
var jsonObj = { t1: $('#t1').val(), p1: $('#p1').val(), t2: $('#t2').val(), p2: $('#p2').val() };
$.ajax({
type: 'POST',
url: 'http://localhost/Base_Data/InsertItem.aspx',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(jsonObj),
dataType: 'json',
success: function(msg) {
alert('Success!');
},
error: function(msg) {
alert('Error!');
}
});
然后在服务器端将您的json反序列化为dynamic
对象并获取数据:
public Test(string json)
{
var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<dynamic>(json);
var first = int.Parse(result["t1"]);
var second = int.Parse(result["t2"]);
}
<强>更新强>
根据您的评论,您将无法使用dynamic
对象,您应该能够将您的JSON反序列化为Dictionary
,例如
var result = serializer.Deserialize<Dictionary<string, string>>(json);