ajax传参结合spring 3.X总结

前端之家收集整理的这篇文章主要介绍了ajax传参结合spring 3.X总结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

笔者对于前台和controller交互数据,即http请求数据格式有疑惑,先做如下总结笔记:

附带fiddle工具使用方法,来测试http请求接口


ajax传json数据格式

 var json = { "ids": 123,"displayFlag": 1,"etnId": 456};
	    var request = $.ajax({  
	        url: url,type: "POST",async: false,data: JSON.stringify(json),dataType: "json",contentType: "application/json; charset=utf-8",cache: false,success: function (r,textStatus) {  
	        	query("dg",null);//刷新datagrid
	        },error: function (XMLHttpRequest,textStatus,errorThrown) { alert(XMLHttpRequest.readyState); }  
	    });  
最关键的:

@1.JSON.stringify(json) 定义的json 是个字符串,需要首先调用js的stringify转为json string

@2.contentType: "application/json; charset=utf-8",值得是数据以json的格式进行传输,

默认是contentType: "application/x-www-form-urlencoded; charset=utf-8"

我的理解这种传输的是字符串


VcUpdateCommentVo.java

public class VcUpdateCommentVo {

	private String ids;
	
	private boolean displayFlag;
	
	private String etnId;

	public String getIds() {
		return ids;
	}

	public void setIds(String ids) {
		this.ids = ids;
	}

	public boolean isDisplayFlag() {
		return displayFlag;
	}

	public void setDisplayFlag(boolean displayFlag) {
		this.displayFlag = displayFlag;
	}

	public String getEtnId() {
		return etnId;
	}

	public void setEtnId(String etnId) {
		this.etnId = etnId;
	}
}
定义一个request bean供controller中使用,ids、displayFlag、etnId对应着请求ajax请求中的json


控制器中获取ajax请求参数

 @RequestMapping("/batchUpdateCommentStatus")
    @ResponseBody
    public int batchUpdateCommentStatus(@RequestBody VcUpdateCommentVo vcUpdateCommentVo){
    	return 0;
    }
@1.@RequestBody ,一句话就是此spring注解会识别context-type中application/json,解析前台json绑定到 VcUpdateCommentVo上




结果展现



通过fiddle观察http请求:




字符串传参方式

_json = { "ids": 123456,"etnId": 789};
	    var request = $.ajax({  
	        url: url,data: _json,contentType: "application/x-www-form-urlencoded; charset=utf-8",errorThrown) { alert(XMLHttpRequest.readyState); }  
	    });  
@1.contentType: "application/x-www-form-urlencoded; charset=utf-8",指定contentType为 字符串传值类型,contentType不配置时候,也是此默认值,并且data:_json会配合contentType把所谓的JSON格式转成下面这种请求数据格式。

ids=123456&displayFlag=1&etnId=789

参考:http://tool.oschina.net/apidocs/apidoc?api=jquery


为验证,从fiddle中搂取http请求。


被ajax转成浏览器请求的格式了, 即 ?param1=xx&param2=xx


后台控制器获取数据:

 @RequestMapping("/batchUpdateCommentStatus")
    @ResponseBody
    public int batchUpdateCommentStatus(
    		@RequestParam(value = "ids",required = true)String ids,@RequestParam(value = "displayFlag",required = true)boolean displayFlag,@RequestParam(value = "etnId",required = true)String etnId){
    	String hideUserName = getCurrentUsername();
    	int updateRows = vcCarWashCommentService.batchUpdateCommentStatus(ids,displayFlag,hideUserName,etnId);
    	logger.info("批量更新用户评论信息从session获取用户名为:" + hideUserName + "成功更新条数为:" + updateRows);
    	return updateRows;
    }
@1.这里使用@RequestParam获取每一个入参对象




总结:

前台ajax中指定contentType告诉http的接收方我送什么格式数据给你,我可以送字符串,送对象(包含json,xml格式对象)

后台:对于普通的字符串参数,使用@RequestParam获取参数即可,其他的均要使用@RequestBody对Object入参进行解析,绑定

猜你在找的Ajax相关文章