ajax前台传值到后端 部分方式

这篇博客详细介绍了三种通过Ajax将数据从前端传递到Java MVC后端的方法:1) 将对象转换为JSON字符串并使用POST请求;2) 传递数组,需设置traditional: true属性;3) 表单序列化,确保input的name与对象属性匹配。此外,还讨论了Ajax的跨域访问,提供了一个传数组的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、对象(一个或多个对象转化成一个json字符串)
前端

contentType:“application/json”,:表示传过去的为 json字符串 类型,必须用post请求

$(function () {
        var dept={"id":1,"dName":"xiaoli"};
        var depts=[{"id":1,"dName":"xiaoli"},{"id":2,"dName":"xiaoli2"}];
        $.ajax({
            url:"${pageContext.request.contextPath}/tc/duoGeDuiXiang.do",
            type:"post",
            //contentType: "text/plain;charset=ISO-8859-1",
            //contentType: "application/x-www-form-urlencoded;charset=UTF-8",
            dataType:"text",
            contentType:"application/json",
            data:JSON.stringify(depts),     //js中 把一个或多个对象转化成一个json字符串
            success:function (info) {
                alert(info);
            },
            error:function () {
                alert("ajax响应失败");
            }

        })
    })
后台:

​ 若后台传多个对象,用list接收; 注意用注解@RequestBody(是从请求体拿到的数据,非url里面,所以前台需要用post请求)

//    多个或单个对象传到控制层,以json格式
    @RequestMapping("duoGeDuiXiangPage.do")
    public String demo2() {
        return "duoGeDuiXiang";
    }

    @RequestMapping(value = "duoGeDuiXiang.do", produces = "application/json;charset=utf-8")
    @ResponseBody
    public String duoGeDuiXiang(@RequestBody List<Deparment> depts) {
        System.out.println(depts);
        return "success!";
    }
2、数组
前端:

注意:须加一个属性:traditional: true, 这样才能传数组

$(function () {
    var stu = ["小李", "小王", "小张"];
    $.ajax({
        url: "${pageContext.request.contextPath}/tc/arrayTest.do",
        type: "post",
        //contentType: "text/plain;charset=ISO-8859-1",
        //contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        traditional: true,      //用于传过去的对象为数组
        dataType: "text",       //后端返回来的数据类型
        data: {stu: stu},
        success: function (info) {
            alert(info);
        },
        error: function () {
            alert("ajax响应失败");
        }

    })
})
后台:
//测试页面传数组到控制层
@RequestMapping("arrayPage.do")
public String demo1() {
    return "arrayPage";
}

@RequestMapping(value = "arrayTest.do", produces = "application/text;charset=utf-8")
@ResponseBody
public String arrayTest(String[] stu) {
    for (String s:stu){
        System.out.println(s);
    }
    return "success!";
}
3、表单序列化
前端:

​ 注意:每个input的name和对象的属性名对应

data:$(“form”).serialize(),

<form method="post" class="layui-form">
    <input  placeholder="用户名" type="text" name="personName"
            class="layui-input">
    <hr class="hr15">
    <input  placeholder="密码" type="password" name="personPassword"
            class="layui-input">
    <hr class="hr15">
    <input lay-submit lay-filter="login" style="width: 100%;"
           type="button" value="登录" οnclick="login()" />
    <hr class="hr20">
    <div class="layui-form-item">
        <div class="layui-form-item" pane="">

            <input type="checkbox" lay-filter="filter"  id="memoryuser" lay-skin="primary" title="30天内自动登录" >

        </div>
    </div>
</form>

<script>
    //进行登录处理
    function login() {
        $.ajax({
            type:"post",
            url:"${pageContext.request.contextPath}/pc/checkLogin.do",
            dataType:"text",
            data:$("form").serialize(),
            success:function (info) {
                alert(info)
                if(info=="success"){
                    layer.msg("登录成功", {icon: 1});
                }else{
                    layer.msg('账号或者密码错误!', {icon: 2});
                }
            },
            error:function () {
                layer.msg('ajax请求失败', {icon: 2});
            }
        })
    }
</script>
后台
@Controller
@RequestMapping("pc")
public class PersonController {

    @Autowired
    private PersonService personService;

    @RequestMapping(value = "checkLogin.do")
    @ResponseBody
    public String checkLogin(Person person){
        System.out.println("-------------person----------"+person);
        String info = personService.checkLogin(person);
        System.out.println("---------info-----------"+info);
        return info;
    }
}
ajax跨域访问
后台 这里举的传数组的例子
//ajax跨域访问
@RequestMapping(value = "crossDomain.do", produces = "application/text;charset=utf-8")
@ResponseBody
public String crossDomain(HttpServletResponse resp,String [] stu){
    //允许所有域名访问该资源
    resp.setHeader("Access-Control-Allow-Origin","*");
    /*resp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    resp.setHeader("Access-Control-Max-Age", "3600");*/
    resp.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
    /*  resp.setHeader("Access-Control-Allow-Credentials","true");*/

    for (String s:stu){
        System.out.println(s);
    }

    return "success";
}
前端

​ 注意ajax里面的 url 得根据项目路径

<!doctype html>

crossDomainTest crossDomainTest
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值