前后端分离(三)

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


原文地址:https://www.cnblogs.com/haxianhe/p/9271209.html