Ajax与后端交互的几种形式小结(后端接收)

3,376 阅读1分钟

类型一:请求:key/value ,后端返回:text,方式:Get

前端:传输数据类型:key/value ,返回数据类型:text

后端:接收方式:形参名绑定key名获取数据,返回方式:@ResponseBody返回字符串

@RequestMapping(value = "/a",produces="application/json; charset=utf-8")//produces修正@responsebody返回乱码的问题

//前端 发送key/value
$.get({
    url:"${pageContext.request.contextPath}/user/nameRepeat",
    data:{"name":$("#username").val()},
    dataType:"text", //返回的数据类型
    success:function (data) {
        if(data.toString()=="pass"){
            $("#nameError")[0].innerHTML='用户名可用';
            $("#nameError").css({"color":"green"});
        }else {
            $("#nameError")[0].innerHTML = "用户名重复,请重新输入";
            $("#nameError").css({"color":"red"});
        }
    }
})
//后端 形参绑定 + 返回字串
@RequestMapping("/nameRepeat")
@ResponseBody
public String isNameRepeat(String name){
    logger.info("检查用户名是否重复");
    boolean isRepeat = userService.UsernameIsRepeat(name);
    if(isRepeat){
        logger.info("用户名已存在");
        return "";
    } else {
        logger.info("用户名可用");
        return "pass";	
    }
}

类型二:请求:JSON,后端返回text,方式:POST

后端用实体类接收,前端必须使用 json字符串传输,否则后端实体类无法绑定

前端:传输数据类型:JSON字符串;使用js对象封装数据,使用JSON.stringify(user)将用户名转为JSON字符串。

附:JSON.parse()可以将 JSON字符串转为一个对象 JSON.stringify() JSON对象转为JSON字符串

后端:接收方式:实体类接收(需使用@RequestBody绑定),返回类型:字串

//前端 发送json
var jsonUser=JSON.stringify(user);//js对象转为json
$.post({
    url:"${pageContext.request.contextPath}/user/userLogin",
    data:jsonUser,//json格式
    contentType: "application/json;charset=UTF-8",//发送json需要定义
    dataType:"text",//返回数据类型
    success:function(data) {
        if(data=='pass'){
            location.href="${pageContext.request.contextPath}/book/index";
        }else {
            alert('请输入正确的用户名或密码');
        }
    }
})
//后端 实体类接收 返回字符串
@RequestMapping("/userLogin")
@ResponseBody
public String userLogin(@RequestBody user user, HttpServletRequest request){..}

类型三:请求:key/value,后端返回json,方式GET

遇到:ajax发送key/value传递查询范围,controller使用map接收,但是map会自动将integer类型的页码转为String类型导致查询失败,所以需要进行String转integer强转

前端:发送key/value数据

后端:map接收 *map需要使用注解@RequestParam才能绑定。使用@ResponseBody将实体类转换为json字符串传输到前端。但是需要配置jackons依赖包且开启注解驱动 <mvc:annotation-driven/>

jackson-core jackson-databind jackson-annotations

//前端 发送key/value
$.getJSON("/book/allBook",{"startIndex":startIndex,"pageSize":pageSize},function (data) {})
//后端 使用map接收
 @RequestMapping("/allBook")
public @ResponseBody List<book> AllBook(@RequestParam Map<String,String> map){}