Json在前台与后台之间的使用
一、将前台数据,使用ajax中的post、get传到后台
1、生成JSON字符串
1.1在前台页面生成JSON
<label>无锡</label><input type="checkbox" name="city" value="无锡" />
<label>苏州</label><input type="checkbox" name="city" value="苏州" />
<label>江苏省</label><input type="checkbox" name="province" value="江苏省" />
<input type="button" name="btn" value="点击查看" id='btn_query'/>
HTML代码
$("#btn_query").click(function () {
var citys=[];
$("input[name='city']:checked").each(function () {
var options={};
if(this.value!=""){
options.city=this.value;
citys.push(options);
}
});
});
JS代码声明数组,将数组当成JSON对象
<input name="name" type="text" id="name" value="" />
<input type="text" name="name" value="" id="email" />
<input type="text" name="name" value="" id="tel" />
<input type="text" name="name" value="" id="memo" />
HTML代码
var data = new Object;
data.name = document.getElementById('name').value;
data.email = document.getElementById('email').value;
data.tel = document.getElementById('tel').value;
data.memo = document.getElementById('memo').value;
var str = JSON.stringify(data);
JS声明对象,再讲对象转换成JSON
$.ajax({
type: 'post',
url: 'your url',
data: JSON.stringify(citys),//这里的citys 第一段JS代码中的city(JS数组)
success: function(data) {
如果是form提交,可以使用$("form").serialize()来讲表单内的内容,转换成String。
//serialize方法,是jQuery中序列化方法。
} });
//ajax的简便使用
$.post("url",{id:123},function(data){
alert(data)
});
{id:123} 就是一个json
$.get("url","age=23&name=vichin",function(data){
alert(data)
});
$.getJSON();要求后台必须返回一个json对象
通过Ajax,将JSON数据传递到后台
二、在后台中取得前台传来的数据
$.ajax({
type: "post",
url: "Handler1.ashx?action=citys",
data:JSON.stringify(a),//这里的a一定要是一个json对象,而不是能json格式的字符串
success: function (result) {
alert(result);
}
});
//后台取值
//先生成一个person类。该类的结构,要与前台的json结构一致!
public class getJson
{
public string city { get; set; }
}
//使用NewtonSoft.dll
var stream = context.Request.InputStream;//获取传递过来的JSON对象
string json = new StreamReader(stream).ReadToEnd();//获取传递过来的JSON对象
getJson city = JsonConvert.DeserializeObject<getJson>(json);
//使用.net内置对象
public void citys(HttpContext context) {
var stream = context.Request.InputStream;
string json = new StreamReader(stream).ReadToEnd();
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
List<getJson> cityList = js.Deserialize<List<getJson>>(json);
context.Response.Write("转换成功!");
}
C#里处理前台传来的JSON
将DataTable转换成Json对象
1、使用Json.net转换
string sqlstr="select * from table";
DataTable DT =SqlHelper.Query(sqlstr);
if (DT.Rows.Count != )
{
context.Response.Write(JsonConvert.SerializeObject(DT, new DataTableConverter()));
}
将DataTable转换成Json对象
2、使用C#代码转换(该方法主要是用于Jquery Easy UI中)
/// <summary>
/// dataTable转换成Json格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2Json(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("[");
for (int i = ; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = ; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append("},");
}
if (dt.Rows.Count > )
{
jsonBuilder.Remove(jsonBuilder.Length - , );
}
jsonBuilder.Append("]");
return jsonBuilder.ToString();
}
DataTable2Json with C# code
3、在后台将数据序列化成JSON字符串
//实体:
public class outData
{
public List<string> NewList { get; set; }
public string user { get; set; }
} string WannaJson()
{
List<string> newList = new List<string>();
newList.Add("");
newList.Add("");
newList.Add(""); outData data1 = new outData();
data1.NewList = newList;
data1.user = "james"; JavaScriptSerializer js = new JavaScriptSerializer();
string strJson = js.Serialize(data1);
return strJson;
}
使用实体来转换
string GetJson()
{
List<string> newList = new List<string>();
newList.Add("");
newList.Add("");
newList.Add("");
var data = new { newList = newList, name = "Vichin" };
JavaScriptSerializer js = new JavaScriptSerializer();
string strJson = js.Serialize(data);
return strJson;
}
使用匿名类来序列化
四、将后台的数据,传给前台
将数据通过ajax返回给前台后,使用js的eval函数,就可以把string转换成json对象了
success: function (data) {
var man= eval(data);
//后面要执行的代码for(int i=0;i<man.length;i++){
....
}
}
注意:
JSON对象转化JSON字符串
var jsonstr =JSON.stringify(jsonObject );
JSON字符串转化JSON对象
var jsonObject= jQuery.parseJSON(jsonstr); JSON中的stringify 和 parse对象所支持的浏览器都是要在IE8以上的(IE8兼容模式也不行)。 stringify兼容性问题:
MSDN上原话:在以下文档模式中受到支持:Internet Explorer 8 标准模式、Internet Explorer 9 标准模式、Internet Explorer 10 标准模式、Internet Explorer 11 标准模式。
解决方法:
1、将页面强制设置浏览器打开页面的文档模式
<head><metahttp-equiv="X-UA-Compatible"content="IE=8">…</head>——————将浏览器打开页面时,默认文档设置为IE 8
2、在页面上引用JSON2.JS
eval对象支持ie6\7(听说好像是不太安全)!
$.parseJSON()———— 将格式完好的JSON字符串转为与之对应的JavaScript对象(jQuery3.0以后废弃(改用JSON.parse),在1.9中推荐使用)
$.param()方法————用于将JS内的数组转换成JSON对象
var obj = {
name: 'sunnie'
};
var flag = isHasAttr(obj, "name");
var val = isHasAttrVal(obj, "name", "sunnie");
//是否有对象属性
function isHasAttr(obj, attr) {
//判断是否有该键值
if (obj && obj.hasOwnProperty(attr)) {
//如果有返回true
return true;
}
return false;
}
//是否含有对象属性对应的值
function isHasAttrVal(obj, attr, value) {
//判断是否有该键值对应的值
if (obj && obj.hasOwnProperty(attr) && obj[attr] === value) {
//如果有返回true
return true;
}
return false;
}
判断JSON对象下是否包含某个值或者某个属性
JSON.net官网
使用newtonSoft.dll进行序列化与反序列化 https://www.newtonsoft.com/json/help/html/SerializeDataSet.htm
Json在前台与后台之间的使用的更多相关文章
- Jquery EasyUI +Ajax +Json +一般处理程序 实现数据的前台与后台的交互 --- 善良公社项目
经过上一篇博客,本节主要是来看实现的功能是后台的数据通过json数据传过来,前台修改的数据再传回数据库之后页面再次更新table中的数据: 图示: 实例:前台的代码 <%--表格显示区--%&g ...
- ASP.NET中使用JSON方便实现前台与后台的数据交换
ASP.NET中使用JSON方便实现前台与后台的数据交换 发表于2014/9/13 6:47:08 8652人阅读 分类: ASP.NET Jquery extjs 一.前台向后台请求数据 在页面加 ...
- Linux的bg和fg命令 ---让程序在前台后台之间切换
Linux的bg和fg命令 我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和 bg 命 ...
- 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>
前台的js对象数组传到后台处理.在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>
- spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500:no convertter for return value of type
问题描述 spring Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson spring boot 新增配置解决后台返回 json 到前台中文乱码之后,出现返回json ...
- Struts2 前端与后台之间传值问题
老是被前端与后台之间的传值给弄糊涂了,特此写一篇blog进行总结. 一. 前端向后台传值 (1)属性驱动 属性驱动是指在Action类里,包含表单里对应的字段(字段名称一样),同时设置对应的gette ...
- Ext分页实现(前台与后台)
Ext分页实现(前台与后台)Spring+Mybatis 一.项目背景 关于Ext的分页网上有很多博客都有提到,但是作为Ext新手来说,并不能很容易的在自己的项目中得以应用.因为,大多数教程以及博客基 ...
- MVC 前台向后台传输数据
今天,我们一起来学习下.MVC如何在前台给后台传输数据 (1)前台传输数据到后台 具体思路:前台拼凑json字符串,然后通过 get 或 post 方式,传递到后台 Action 方法中 我现在前台展 ...
- 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP——理论篇
工作两年多了,我会经常尝试给公司小伙伴儿们解决一些问题,几个月下来我发现初入公司的小朋友最爱问的问题就三个 1. 我想前台调用后台的XXX方法怎么弄啊? 2. 我想后台调用前台的XXX JavaScr ...
随机推荐
- 【python】类中@property使用
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...
- 【freemaker】之自定义指令通用select模版
测试代码 @Test public void test08(){ List<Group> groups=Arrays.asList(new Group(1,"山口组") ...
- 使用-MM生成include指令和依赖生成(make include directive and dependency generation with -MM)
I want a build rule to be triggered by an include directive if the target of the include is out of d ...
- 非归档模式下使用Rman进行备份和恢复
实验环境: 一.首先进行全库数据备份: 在非归档模式下,rman备份需要在mount模式下进行 SQL> select status from v$instance; STATUS ------ ...
- ubuntu14.04配置impala的odbc连接
cdh hive和impala的odbc驱动 http://www.cloudera.com/downloads.html.html 选择 SLES 11 64-bit下载: http://www.c ...
- JS-改变页面的颜色(二)
需求:点击页面的按钮,改变页面的颜色 思路:一先画出最简单的页面,二想办法获取页面的body节点,三想办法修改body节点的背景颜色属性,四通过一个方法获取随机的颜色值 和第一个例 ...
- 初始化成员列表 ——— 类的const成员和引用成员的初始化
class A { public: A(){}; const int num; CString& s; } A::A() { cout<<A con<<endl; } ...
- CSS基础篇
写的不错,收藏 http://www.cnblogs.com/suoning/p/5625582.html
- 【T电商】 maven初识
PS:本篇博客,就是对于maven的一个简单的总结,认识.可能更多的是借鉴别人的看法,然后结合自己的使用,再加以说明. 首先,什么是maven: Apache Maven is a software ...
- Thinkphp源码分析系列(一)–入口文件
正如官方文档上所介绍的,thinkphp使用单一入口,所有的请求都从默认的index.php文件进入.当然不是说一定非得从index.php进入,这应该取决于你的服务器配置,一般服务器都会有默认的首页 ...