第一步,接收数据
用ajax来接收后端发来的数据,简单说下ajax,ajax是一种用于快速创建动态网页的技术。通过在后台与服务器进行少量数据交换,ajax就可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。而传统的网页(不使用ajax)如果需要更新内容,必须重载整个网页面。
type: “POST”, //请求的方式,也有get请求
url: “myfileAction”, //请求地址,后台提供的,填写具体action,也就是struts.xml文件中action名字。
data: {name:name},//data是传给后台的json字段,后台需要哪些就传入哪些,这里是接收数据,所以可以不用写。
dataType: “json”, //json格式,后台返回的数据为json格式的。
第二步,解析数据
前后台传输的时候其实是字符串,解析是把json字符串重新变成json类型的对象。
json字符串转换成json对象
var obj = eval('(' + data + ')');
或者 var obj = JSON.parse(data);
区别:eval方法不会去检查给的字符串时候符合json的格式,同时如果给的字符串中存在js代码eval也会一并执行。相比而言eval()不安全,建议用JSON.parse。
json对象转为json字符串
var name = JSON.stringify(person);
前端传入后台的应该是一个json格式的字符串,而不是一个json对象,所以这个也有用的。
讲到这里简单提下发送数据吧。
<script type="text/javascript">
$(document).ready(function(){
var saveDataAry=[];
var data1={"userName":"zhangsan","address":"bj"};
var data2={"userName":"lisi","address":"nj"};
saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
}
});
});
</script>
ajax请求的时候也要指定dataType:“json”,contentType:”application/json” 这样就可以轻易的将一个对象或者List传到后端。
第三步,数据遍历
可以通过jQuery的$.each()方法遍历输出,举个例子
var arr = [{ name: "john", lang: "js" },{ name: "张三", lang: "ext" }];
$.each( arr, function(index, content)
{
alert( "the man's no. is: " + index + ",and " + content.name + " is learning " + content.lang );
});
如果声明的是字符串,var arr=’[]’这样类型,那么遍历的时候应该先用json.parse()或者jquery的方法$.parseJSON将字符串转化为对象。
还有一种是for循环遍历
for(var i=0; i<arr.length; i++)
{
alert(arr[i].name+" " + arr[i].value)
}
//取arr数组里一个叫name的值,比如上面name后面值是张三,就取出张三
五.json在后端上的应用
在后端action里要导入 net.sf.json.JSONObject这个包。
第一步,有几种后端数据封装成json数据格式
1.List集合转换成json代码
List list = new ArrayList();
list.add( “first” );
list.add( “second” );
JSONArray jsonArray = JSONArray.fromObject( list );
2. Map集合转换成json代码
Map map = new HashMap();
map.put(“name”, “json”);
map.put(“bool”, Boolean.TRUE);
map.put(“int”, new Integer(1));
map.put(“arr”, new String[] { “a”, “b” });
map.put(“func”, “function(i){ return this.arr[i]; }”);
JSONObject json = JSONObject.fromObject(map);
3.Bean转换成json代码
JSONObject jsonObject = JSONObject.fromObject(new JsonBean());
4. 数组转换成json代码
boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
5. 一般数据转换成json代码
JSONArray jsonArray =JSONArray.fromObject([‘json’,’is’,’easy’]” );
6.用json put方法
JSONObject json=new JSONObject();
json.put(“name”, “张三”);
json.put(“age”, 18);
第二步,给你一个Struts 2的struts.xml中配置json类型result
<package name="json" extends="json-default" >
<action name="\*\*\*Action"
class="action.UserAction" method="add">
<result type="json">
<param name="root">result</param>
</result>
</action>
</package>
<param>
这个标签是设置参数的,对于java程序来说,这个标签就相当于定义一个root 变量,将其赋值为map ,前台可以获取使用root这个参数值。
所以action里要有get,setresult方法,把json字符串值给reslut setResult(json.toString());
接收前端提交的数据
String data = request.getParameter("data");
JSONArray json=JSONArray.fromObject(data);
JSONObject jsonOne;
Map<String,String> map=null;