1、關於先後端分離採用GET和POST傳輸JSON字符串的問題html
一、GET傳輸前端
採用GET方法傳輸JSON字符串至關於在URL中傳輸中文因此須要對要傳輸的JSON進行編碼和解碼的工做,具體的過程以下:json
//獲取數據 var obj = new Object(); obj.province = document.getElementById("province").value; obj.city = document.getElementById("city").value; var s = JSON.stringify(obj); //s = "&s="+s; s = encodeURI(s); s = encodeURI(s); //兩次編碼
能夠看到在前端使用encodeURL()對JSON字符串進行了兩次編碼後端
String s=context.Request.QueryString["s"]; //解碼 s = System.Web.HttpUtility.UrlDecode(s); //將json字符串轉換爲對象 JObject jObject = JObject.Parse(s); //接收province參數 String p = (string)jObject["province"]; //接收city參數 String c = (string)jObject["city"];
能夠看到在後臺使用System.Web.HttpUtility.UrlDecode()進行了一次解碼app
二、POST傳輸前後端分離
採用POST傳輸的時候把要傳輸的數據在send(s)的時候傳輸出去dom
var s = JSON.stringify(obj); //s = "&s="+s; //s = encodeURI(s); //s = encodeURI(s); //兩次編碼 //發送數據 //http.open("GET", "server.ashx?&s=" + s + "&rnd=" + Math.random().toString(), true); http.open("POST", "server.ashx?&rnd=" + Math.random().toString(), true); //設置數據格式 http.setRequestHeader("content-Type", "application/json"); //http.send(null); http.send(s);
能夠看在前端不用編碼編碼
//接收s //String s=context.Request.QueryString["s"]; context.Response.ContentType = "application/json"; context.Response.Cache.SetCacheability(HttpCacheability.NoCache); String s; using (var reader = new System.IO.StreamReader(context.Request.InputStream)) { s = reader.ReadToEnd(); if (!string.IsNullOrEmpty(s)) { //業務處理 } } //s = System.Web.HttpUtility.UrlDecode(s); //將json字符串轉換爲對象 //JObject jObject = (JObject)JsonConvert.DeserializeObject(s); //JArray jar = JArray.Parse(jObject["RTDataSets"].ToString()); JObject jObject = JObject.Parse(s); //接收province參數 String p = (string)jObject["province"]; //接收city參數 String c = (string)jObject["city"];
在後臺能夠看到經過流的形式接收數據code
2、關於先後端分離關於JSON的知識server
{「province」:"廣東","city":"深圳"}
它表示一個對象,對象中有兩個屬性,一個屬性是province,值爲「廣東」,另一個屬性是city,值爲「深圳」。
一、普通對象
JSON格式中規定一個對象以「{」開始,以「}」結束,對象內部是該對象的每一個元素,每一個元素是一個「名稱:值」對,每一個「名稱」後跟一個「:」,名稱用雙引號引發來,若是值是字符串也要用雙引號引發來。若是對象有多個元素,那麼