(8)ajax发送put请求的两种方式

(1)第一种:ajax发post请求,HiddenHttpMethodFilter再将其转化成put请求。

配置HiddenHttpMethodFilter过滤器

<filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

jsp页面

$(document).on('click',"#user_update_btn",function(){
        //1 验证输入的信息是否合法
        //alert($("#update_user_modal form").serialize());//获取表单数据失败
        console.log("表单数据为:"+$("#update_user_modal form").serialize()+",下面发送put请求"); 
        //2 使用ajax发送put请求
        $.ajax({
            url:"${pageContext.request.contextPath}/user/"+$(this).attr("edit_id")+".do",
            type:"post",
            data:$("#update_user_modal form").serialize(),//输出修改模态框中表单的序列化结果:+"&_method=PUT"
            success:function(result){
                alert(result.msg);
                //关闭对话框

                //回到本页面
            },
            error:function(result){
                console.log("请求失败");
            }
        }) 
    }) 

控制器处理请求

/**
     * 前端发送ajax-PUT请求,
     * 要在web.xml中配置HttpPutFormContentFilter过滤器,
     * 因为tomcat容器只能把post或get请求封进map,而springMVC的HttpPutFormContentFilter进行了增强,可以把其他类型(如put)的请求加进map
     * @param user
     * @return
     */
    @RequestMapping(value="/user/{id}",method=RequestMethod.PUT)
    @ResponseBody
    public JasonMsg updateUser(User user,HttpServletRequest request){
        System.out.println("请求方式_method:"+request.getParameter("_method"));
         System.out.println("服务端接受的ajax_put传来的用户数据:"+user);//用户名跟密码都是null
         userService.updateUser(user);
         return JasonMsg.success();
    }

模态框下的表单
这里写图片描述

mybatis映射文件中的update语句

<update id="updateUserByPrimaryKeySelective" parameterType="cn.hdu.entity.User">
        update user set password=#{password} where id=#{id}
</update>

结果显示
这里写图片描述
(2)第二种:ajax直接发送put请求,让HttpPutFormcontentFilter识别它(推荐使用第二种ajax直接发送put请求

配置httpPutFormcontentFilter过滤器

 <filter>
        <filter-name>httpPutFormcontentFilter</filter-name>
        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>httpPutFormcontentFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

jsp页面ajax请求
这里写图片描述

表单
这里写图片描述

剩下的controller,sql等部分都不变

结果图

这里写图片描述
(3)最后总结一下注意事项:
使用jquery的serialize()序列化表单数据,虽然很方便,很直接的拿到表单所有数据,别忘了要序列化的值必须有name属性
点击,查看serialize()方法详细说明文档

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值