前后端分离(三)
一、关于前后端分离采用GET和POST传输JSON字符串的问题
1、GET传输
采用GET方法传输JSON字符串相当于在URL中传输中文所以需要对要传输的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()进行了一次解码
2、POST传输
采用POST传输的时候把要传输的数据在send(s)的时候传输出去
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"];
在后台可以看到通过流的形式接收数据
二、关于前后端分离关于JSON的知识
{“province”:"广东","city":"深圳"}
它表示一个对象,对象中有两个属性,一个属性是province,值为“广东”,另外一个属性是city,值为“深圳”。
1、普通对象
JSON格式中规定一个对象以“{”开始,以“}”结束,对象内部是该对象的每个元素,每个元素是一个“名称:值”对,每个“名称”后跟一个“:”,名称用双引号引起来,如果值是字符串也要用双引号引起来。如果对象有多个元素,那么