ASP.NET利用JQuery中的Aajax实现JSON数据后台交互
JSON简单介绍:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.
简单 JSON 示例
按照最简单的形式,可以用下面这样的 JSON 表示名称 / 值对:
{ "firstName": "Brett" }
本人使用的是Newtonsoft.Json类库。
后台代码:
public static class JsonHelper<T, K>
{
/// <summary>
/// 序列化
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public static string JsonWriter(T t)
{
return JsonConvert.SerializeObject(t,new IsoDateTimeConverter());
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="serialize"></param>
/// <returns></returns>
public static T JsonReader(string serialize)
{
return JsonConvert.DeserializeObject<T>(serialize);
}
/// <summary>
/// 将DataTable转化成JSON格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string JsonDataTable(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{\"");
jsonBuilder.Append(dt.TableName.ToString());
jsonBuilder.Append("\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
}
一般应用程序:
public void ProcessRequest(HttpContext context)
{
string index= context.Request.QueryString["p"].ToString();
if (null != index)
{
context.Response.Write(List(int.Parse(index)));
context.Response.ContentType = "json/json";//设置写出的是JSON格式文件
}
}
public bool IsReusable
{
get
{
return false;
}
}
private string List(int id)
{
C_USER user = new C_USERService().GetById(id);
string json =JsonHelper<C_USER, int>.JsonWriter(user);
return json;
}
页面调用:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head runat="server">
<title>Json测试</title>
<script language="javascript" type="text/javascript" src="script/jquery-1.4.2.min.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$.ajax({
url:"Handler.ashx?p=1",
//dataType:"json",
type:"post",
success:function(json)
{
alert(json.NAME); //NAME是实体类中的一个属性
}
});
});
</script>
</head>
<body>
<form id="form1">
</form>
</body>
</html>
结束:
问题的一些总结:
1、用Newtonsoft.Json类库3.5的版本的时候运行出异常System.Runtime..........的异常,问题是安装的Framework3.5版本是sp1.0的不存在那个方法,建议升级下或者用Newtonsoft.Json类库2.0版本
2、当json文件写出后一直没发用,解决方法:在一般应用程序里+ context.Response.ContentType = "json/json";//设置写出的是JSON格式文件或者在Ajax那里+ dataType:"json",写出的是json格式。
3、如果用get请求会出现URL缓存(点击第一次的时候可以第二次就不管用)解决方案:1、改用post请求或者设置一个参数(参数采用系统时间的秒)如:
var date =new Date();
var nocache=date.getSeconds();
Ajax中使用范例: url:"Handler.ashx?p=1&nocache="+nocache,
文章如果有不明之处可以留言,谢谢。
完。