一、关于前后端分离采用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);
-
- JObject jObject = JObject.Parse(s);
-
-
- String p = (string)jObject["province"];
-
-
- 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);
可以看在前端不用编码
-
-
- 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))
- {
-
- }
- }
-
-
-
-
- JObject jObject = JObject.Parse(s);
-
-
- String p = (string)jObject["province"];
-
-
- String c = (string)jObject["city"];
在后台可以看到通过流的形式接收数据
二、关于前后端分离关于JSON的知识
{“province”:"广东","city":"深圳"}
它表示一个对象,对象中有两个属性,一个属性是province,值为“广东”,另外一个属性是city,值为“深圳”。
1、普通对象
JSON格式中规定一个对象以“{”开始,以“}”结束,对象内部是该对象的每个元素,每个元素是一个“名称:值”对,每个“名称”后跟一个“:”,名称用双引号引起来,如果值是字符串也要用双引号引起来。如果对象有多个元素,那么
来源:
http://blog.csdn.net/finish_dream/article/details/51353823