标签:
一、关于前后端分离采用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格式中规定一个对象以“{”开始,以“}”结束,对象内部是该对象的每个元素,每个元素是一个“名称:值”对,每个“名称”后跟一个“:”,名称用双引号引起来,如果值是字符串也要用双引号引起来。如果对象有多个元素,那么
标签:
原文地址:http://blog.csdn.net/finish_dream/article/details/51353823