1、將前臺數據,使用ajax中的post、get傳到後臺html
一、生成JSON字符串ajax
1.1在前臺頁面生成JSONsql
<label>無錫</label><input type="checkbox" name="city" value="無錫" /> <label>蘇州</label><input type="checkbox" name="city" value="蘇州" /> <label>江蘇省</label><input type="checkbox" name="province" value="江蘇省" /> <input type="button" name="btn" value="點擊查看" id='btn_query'/>
$("#btn_query").click(function () { var citys=[]; $("input[name='city']:checked").each(function () { var options={}; if(this.value!=""){ options.city=this.value; citys.push(options); } }); });
<input name="name" type="text" id="name" value="" /> <input type="text" name="name" value="" id="email" /> <input type="text" name="name" value="" id="tel" /> <input type="text" name="name" value="" id="memo" />
var data = new Object; data.name = document.getElementById('name').value; data.email = document.getElementById('email').value; data.tel = document.getElementById('tel').value; data.memo = document.getElementById('memo').value; var str = JSON.stringify(data);
$.ajax({ type: 'post', url: 'your url', data: JSON.stringify(citys),//這裏的citys 第一段JS代碼中的city(JS數組) success: function(data) { 若是是form提交,能夠使用$("form").serialize()來說表單內的內容,轉換成String。 //serialize方法,是jQuery中序列化方法。 } }); //ajax的簡便使用 $.post("url",{id:123},function(data){ alert(data) }); {id:123} 就是一個json $.get("url","age=23&name=vichin",function(data){ alert(data) }); $.getJSON();要求後臺必須返回一個json對象
2、在後臺中取得前臺傳來的數據 json
$.ajax({ type: "post", url: "Handler1.ashx?action=citys", data:JSON.stringify(a),//這裏的a必定要是一個json對象,而不是能json格式的字符串 success: function (result) { alert(result); } }); //後臺取值 //先生成一個person類。該類的結構,要與前臺的json結構一致! public class getJson { public string city { get; set; } } //使用NewtonSoft.dll var stream = context.Request.InputStream;//獲取傳遞過來的JSON對象 string json = new StreamReader(stream).ReadToEnd();//獲取傳遞過來的JSON對象 getJson city = JsonConvert.DeserializeObject<getJson>(json); //使用.net內置對象 public void citys(HttpContext context) { var stream = context.Request.InputStream; string json = new StreamReader(stream).ReadToEnd(); System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer(); List<getJson> cityList = js.Deserialize<List<getJson>>(json); context.Response.Write("轉換成功!"); }
將DataTable轉換成Json對象數組
一、使用Json.net轉換瀏覽器
string sqlstr="select * from table"; DataTable DT =SqlHelper.Query(sqlstr); if (DT.Rows.Count != 0) { context.Response.Write(JsonConvert.SerializeObject(DT, new DataTableConverter())); }
二、使用C#代碼轉換(該方法主要是用於Jquery Easy UI中)安全
/// <summary> /// dataTable轉換成Json格式 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string DataTable2Json(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); 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("},"); } if (dt.Rows.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("]"); return jsonBuilder.ToString(); }
三、在後臺將數據序列化成JSON字符串ide
//實體: public class outData { public List<string> NewList { get; set; } public string user { get; set; } } string WannaJson() { List<string> newList = new List<string>(); newList.Add("1"); newList.Add("2"); newList.Add("3"); outData data1 = new outData(); data1.NewList = newList; data1.user = "james"; JavaScriptSerializer js = new JavaScriptSerializer(); string strJson = js.Serialize(data1); return strJson; }
string GetJson() { List<string> newList = new List<string>(); newList.Add("1"); newList.Add("2"); newList.Add("3"); var data = new { newList = newList, name = "Vichin" }; JavaScriptSerializer js = new JavaScriptSerializer(); string strJson = js.Serialize(data); return strJson; }
4、將後臺的數據,傳給前臺函數
將數據經過ajax返回給前臺後,使用js的eval函數,就能夠把string轉換成json對象了post
success: function (data) {
var man= eval(data);
//後面要執行的代碼for(int i=0;i<man.length;i++){
....
}
}
注意:
JSON對象轉化JSON字符串
var jsonstr =JSON.stringify(jsonObject );
JSON字符串轉化JSON對象
var jsonObject= jQuery.parseJSON(jsonstr);
JSON中的stringify 和 parse對象所支持的瀏覽器都是要在IE8以上的(IE8兼容模式也不行)。
stringify兼容性問題:
MSDN上原話:在如下文檔模式中受到支持:Internet Explorer 8 標準模式、Internet Explorer 9 標準模式、Internet Explorer 10 標準模式、Internet Explorer 11 標準模式。
解決方法:
一、將頁面強制設置瀏覽器打開頁面的文檔模式
eval對象支持ie6\7(據說好像是不太安全)!
$.parseJSON()———— 將格式無缺的JSON字符串轉爲與之對應的JavaScript對象(jQuery3.0之後廢棄(改用JSON.parse),在1.9中推薦使用)
$.param()方法————用於將JS內的數組轉換成JSON對象
<head><metahttp-equiv="X-UA-Compatible"content="IE=8">…</head>——————將瀏覽器打開頁面時,默認文檔設置爲IE 8
二、在頁面上引用JSON2.JS
var obj = { name: 'sunnie' }; var flag = isHasAttr(obj, "name"); var val = isHasAttrVal(obj, "name", "sunnie"); //是否有對象屬性 function isHasAttr(obj, attr) { //判斷是否有該鍵值 if (obj && obj.hasOwnProperty(attr)) { //若是有返回true return true; } return false; } //是否含有對象屬性對應的值 function isHasAttrVal(obj, attr, value) { //判斷是否有該鍵值對應的值 if (obj && obj.hasOwnProperty(attr) && obj[attr] === value) { //若是有返回true return true; } return false; }
JSON.net官網
使用newtonSoft.dll進行序列化與反序列化 https://www.newtonsoft.com/json/help/html/SerializeDataSet.htm