Struts2+Jquery实现ajax并返回json类型数据

 主要实现步骤如下:

1、JSP页面使用脚本代码执行ajax请求

2、Action中查询出需要返回的数据,并转换为json类型模式数据

3、配置struts.xml文件

4、页面脚本接受并处理数据

关键有如下几个点

1.引入包:struts2对数据进行json序列化,必须要用到struts2的json-lib,struts2-json-plugin包;

2.json数据处理:异步提交的数据采用json格式,struts2-json-plugin会对数据进行json处理,所以struts2配置文件struts.xml中的package节点的extends必须是:extends="json-default";

例如:"json-default">

3.同样的由于返回的是json数据,所以result的类型也必须采用json;

注意:struts2只能在引入json-lib,struts2-json-plugin包时,result的type属性设定json才不会报错:


     result
    

4.针对异步提交,action的result节点值应该为空,即不能再转向(例如:只能为);

1,首先看jsp页面

页面效果

做一个省市县乡村五级联查的地区下拉列表,首先进入页面要加载所有省份页面代码:

$(function(){
             var pid ="000000000000";
	    	 $.ajax({  
	            url:"getRegionBranch.action",  
	            type:"post",  
	            data:"pid=" + pid,  
	            dataType:"json",  
	            success:function (data) {  
	            $.each(data,function(i,item){
	                    $("#province").append("");//赋值  
	                });  
	  
	            },
	            error:function(xhr, status, error){
							 alert(status);  
	                         alert(xhr.responseText); 
						}//这里不要加"," 
	         }); 
    })
2, Action中查询出需要返回的数据,并转换为json类型模式数据,代码如下

/**
	 * 获取地区 省市县乡镇 五级数据
	 * @return
	 * @throws Exception
	 */
	public String getRegion() throws Exception{
		this.getRequestAndResponse();
		String pid =request.getParameter("pid");
		List region =branchService.getRegion(pid);
		regionList = JSONArray.fromObject(region);
		return SUCCESS;
	}

3,配置struts2.xml文件

首先把

   

改为

   
这样就可以返回json数据了。


        
	
		 
		    regionList
		  
	        /admin/branch/branch_list.jsp
	        /admin/branch/branch_edit.jsp
	
		  
4,页面接收处理数据

                $.each(data,function(i,item){
	             $("#province").append("");//赋值  
	          });  
	  
这里是接收处理List类型转化为json后的数据,循环处理赋值给select的下拉列表。

还有一种返回一个Bean转化为json的数据,例如:

 success:function (data) { 
   JSONObject json = JSONObject.fromObject(user);//将map对象转换成json类型数据
   result = json.toString();//给result赋值,传递给页面
}
result声明get(),set()方法。

然后前台处理数据是这样的:

   success:function(data){
        var d = eval("("+data+")");//将数据转换成json类型,可以把data用alert()输出出来看看到底是什么样的结构
        //得到的d是一个形如{"key":"value","key1":"value1"}的数据类型,然后取值出来

        alert(d.name);

        alert(d.age);
 }

注释:只有返回字符串时需要转换为json对象时才会使用到eval()这个方法,如果ajax中已规定返回dataType为json,这里就不需要使用这个方法了,可以直接使用返回的data数据,建议这样使用。

你可能感兴趣的:(Struts2+Jquery实现ajax并返回json类型数据)