onlineSchool 项目课 一:ajax提交

本文详细介绍了Ajax异步提交的原理与应用场景。重点讲解了如何通过Ajax进行数据提交,包括URL与Controller的匹配、数据类型转换、参数传递及回调函数的使用。同时,对比了同步提交与异步提交的选择,并提供了Ajax在数据操作、页面刷新、模态框填充等场景的具体应用实例。

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

一,ajax异步提交的介绍
url:异步提交到对应的controller,提交的 url 地址要和@Request mapping与函数的名称对应上。

type:‘post’/'get '对应controller中 @PostMapping 或@GetMapping 注解,是接收提交的方式。

dataType:‘json’ 把提交后返回的数据格式转成json,返回的可以是从数据库中查询的数据,也可以没有返回的数据。但是必须要写,T必须要大写,是固定写法。可以 alert 一下resp.errorcode,如果是undefined,表示返回的数据没有转成json格式。

data:{“id”:id}通过触发函数,把当前操作的数据的id获取出来,当作ajax的参数异步提交到后台。
也可以把其他函数中获取的数据转成string类型,或Freemarket遍历出来的数据也可以当做参数提交到后台。引号内的参数名称要与函数中接收的参数名称一致。

success和err是ajax的回调函数。
success:表示ajax请求到controller,且请求成功,当返回的code是0,表示对数据操作成功,可以给成功的提示刷新或跳转页面。else返回的errcode是1,表示对数据操作失败,返回java中定义的失败提示。
err:表示ajax请求到controller请求失败,表示没有请求到controller,页面无法打开,有可能是url写错了,或者没有加注解,或者是在form表单里的input的类型设置成了submit。

二,提交方式的选择
1,如果不需要返回值,就选择同步提交submit,例如,提交分页的form表单。

<form id="queryForm" style="display: none">
    <input type="text" id="c" name="c">
    <input type="text" id="sortField" name="sortField">
    <input type="text" id="pageNum" name="pageNum">
</form>

function queryPage(pageNum,c,sortField) {
        $('#pageNum').val(pageNum);
        $('#c').val(c)
        if (sortField != null){
            alert(sortField)
            $('#sortField').val(sortField)
        }
        $('#queryForm').submit()
    }

2,如果需要返回值就选择异步提交,ajax或ajaxSubmit。
选择ajax是为了传参数。
ajaxSubmit为了保存数据到数据库,例如保存添加或修改的form表单中的数据到数据库。或者为了实现登录的form表单的提交。

三,ajax的应用场景
1,必须添加操作栏才能对数据进行操作。通过操作栏的触发函数,把当前操作的数据的id获取出来,ajax将id当作参数提交到controller。

<a href="javascript:void(0)" onclick="toEdit(${(items.id)!})">操作</a>
 function toEdit(id) {
        $.ajax({
            url:'${base}/getUser',
            type:'POST',
            dataType:'json',
            data:{'id':id},
            success:function (resp) {
                $('#_userModal').modal('show');
                $('#_userForm').fill(resp.data);
            }
        })
    }

2,controller根据id获取数据然后添加到modal。

 @RequestMapping("getUser")
 @ResponseBody
    public String getUser(AuthUser user){
        user = authUserService.getById(user.getId());
       return JsonView.successJson(user);
    }

3,前端通过封装的函数,通过name把返回的数据fill到form表单对应的输入框。

也可以将返回的数据针对行,通过freemarker遍历出来。

 <#list page.items as items>
 <tr>
 <td>${(items.realname)!}</td>
 <td>${(items.username)!}</td>
 <td>${(items.education)!}</td>
 <td>${(items.mobile)!}</td>
 </tr>
 </#list>

遍历要加判断,避免添加和修改共用一个页面或模态框,或二级数据没有数据。
另外,针对字段一行一行的遍历看看bean或者domain中有没有对应的字段映射吧。

	private String realname;//登录用户名
	private String username;//真实姓名
	private String education;//学历
	private String mobile;//手机号码

4,然后再使用ajaxSubmit提交修改后需要保存的form表单的数据。

function doSave() {
        $('#_userForm').ajaxSubmit({
            dataType: 'json',
            success:function (resp) {
                if (resp.errcode == 0){
                    $('#_userModal').modal('hide');
                    _queryPage();
                }else{
                    Modal.tipFailure("保存失败")
                }
            },
            error:function () {
                Modal.tipFailure("保存失败")
            }
        })
    }

6,提交到controller,在没有登录之前,是根据form表单中隐藏的input的id的值,区别是保存添加还是修改的数据。

<input id="id" name="id" type="hidden">
<input id="id" name="id" style="display: none">

7,也可以通过公共的模态框在confirm的回调函数中发起ajax请求,提交当前操作的数据的id,然后controller根据id删除数据。(删除课程的分类数据后面的文章会有详细的介绍)

function toDelete(id) {
        Modal.confirm("确定删除?",function(type){
            $.ajax({
                url:'${base}/deleteClassify',
                type:'POST',
                data:{"id":id},
                dataType: 'json',
                success: function(resp){
                    if(resp.errcode == 0){
                        window.location.reload();
                    }else{
                        Modal.alert(resp.message);
                    }
                }
            })
        });
    }

8,也可以不使用ajax提交id的方式,直接在a标签中或触发事件中带id参数请求到controller返回一个页面,页面中有通过id参数获取和遍历出来的数据。

<a href="${base}/course/${item.id!}"></a>
<div onclick="window.location.href='${base}/course/${item.id!}'"></div>

9,对于所有前台提交过来的数据,controller中接收以后,会先判断,如果为空返回错误信息。如果提交过来的是id,会根据id获取数据,获取为空再返回错误信息。获取的内容不为空再进行校验或接着执行代码。

  @RequestMapping("getCourse")
    @ResponseBody
    public String getCourse(Long id){
        if (null == id){
            return JsonView.failureJson("id为空,不允许修改");
        }
        Course course = this.courseService.getById(id);
        if (null == course){
            return JsonView.failureJson("课程不存在,无法修改");
        }

        return JsonView.successJson(course);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值