按钮type值的设置导致ajax提交失效

背景
关于按钮属性type值得设置导致ajax提交失效得问题,早在学习java web阶段就已经遇到过了,但是由于当时觉得自己遇到得bug就会记住,属实有点眼高手低了哈,最近在帮同学做一个小项目,由于需要使用ajax异步调用后端接口来实现动态路由。于是设置了一个form表单,弄了一个搜索框(这里实现比较随便了,没有用es),设置了一个提交按钮。问题来了,我的提交按钮设置了是type=“sumbit”。于是找了一上午得bug,我后端就没收到请求。到了下午才想到可能是type属性设置的问题。于是将type属性设置为button完美解决。太菜了。劝小伙伴们以后遇到bug问题一定要记录下来,这样印象才会深刻。不然即使再厉害,也会出现间歇式记忆的,言归正传,下面介绍为什么会出现这样的问题。
 
 
form表单项(这一块type="sumbit"是错误的)

<form class="navbar-form navbar-right" role="search">
      <div class="form-group">
          <input id="searchContext" type="text" class="form-control" placeholder="Search">
      </div>
      <input type="sumbit" class="btn btn-default" onclick="search()" value="Sumbit">
</form>

 
ajxa请求部分

function search(){
        var context = $("#searchContext").val()
        console.log("context: ",context)
        if(context == null){
            window.location.href="/user"
        }else{
            $.ajax({
                async: false,//同步,待请求完毕后再执行后面的代码
                type: "POST",
                url: '/getSearchMenu',
                data:{'menuname':context},
                contentType: "application/x-www-form-urlencoded; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    console.log(data)
                    if(data instanceof Object){
                       window.location.href="/"+data.menu.menuroute
                    }
                },
                error: function (error) {
                    alert("你好呀")
                }
            })
        }
    }

 
原因
当我们使用ajax请求接口时,提交按钮的属性值必须设置为button,如果设置为type=“sumbit”,它会做两件事,即提交了form表单中设置的action接口,也会提交ajax请求,这就会导致ajax还没执行结束,页面就刷新一次了。所以就出现了根本没调到后端的接口。
 
解决方案
将type="sumbit"设置为"button"即可

<input type="sumbit" class="btn btn-default" onclick="search()" value="Sumbit">

 
补充知识
关于input标签中type属性的不同类型的定义与区分

<input type="button"/> <%--定义为一个可点击的按钮。如果没有添加onclick监听事件,点击是没有任何反应的。--%>
<input type="submit"/> <%--定义为一个提交按钮。提交按钮会把表单数据发送到服务器--%>
<input type="submit" disabled/> <%--可以通过设置属性禁用提交动作,默认为true--%>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值