注意在ajax中return false 为什么表单还是会提交呢

本文探讨了使用Ajax进行表单验证时遇到的问题,特别是如何正确处理return false的情况,并给出了解决方案,包括通过设置同步请求及利用标志变量传递验证结果。

当我们用ajax去获取后台数据并做一些表单验证的时候,会发现return false没有用,

看看平时的写法:

function  xxx()

{

$.ajax({

success:function(data)

{

if(data.flag)

{

return true  / false;//返回的内容并不是被onsubmit所接收,而是xxx这个function,所以需要另外借住一个变量来接收这个标志(true or false)再在$.ajax()外return 给onsubmit

}

}


})


}

具体是这样

var flag=false;

$.ajax({
    async:false, ////要设置为同步的,要不CheckUserName的返回值永远为false
    url: "${ctx}/register/registeremail.do",
    type: "Post",
    data: {"email" : email},
    success: function(transport){
                   if(transport==0){
                         var html;
                         document.getElementById("em").style.display="inline";
                         html="<font color=010203>恭喜您,该邮箱可以注册!</font>";
                         $("#em").html(html);
                         clearError(frm["email"]);
                        myflag=true;
                 }else{
                       addErrors(frm["email"],"对不起!该邮箱已经注册!");
                       document.getElementById("em").style.display="none";
                      flag=true;
                  }
         }
});
// alert(flag + "...邮箱...");
 if(flag){
        return false;
 }


使用 Ajax 提交表单主要有以下几种方法: ### jQuery 中的 $.ajax 方法 通过创建 `FormData` 对象收集表单数据,并使用 `$.ajax` 方法发送请求。以下是示例代码: ```javascript function submitImage() { // 这里把表单的 ID 传进去 var obj = new FormData(document.getElementById("coachForm")); $.ajax({ type: 'post', url: '${pageContext.request.contextPath}/upload/coachImgPic.do', data: obj, // 告诉 jQuery 不要去处理发送的数据 processData: false, // 告诉 jQuery 不要去设置 Content-Type 请求头,因为表单已经设置了 multipart/form-data contentType: false, success: function (data) { console.log(data); $('#imgpic').attr(data); $('#photo').attr(data); } }); } ``` 上述代码中,通过 `FormData` 对象获取表单数据,然后使用 `$.ajax` 方法将其发送到指定的 URL,并在成功时更新页面元素 [^2]。 ### 原生 JavaScript 方法 使用 `XMLHttpRequest` 对象来实现表单数据的提交,示例代码如下: ```javascript const submit = function (formEle) { return new Promise(function (resolve, reject) { // Serialize form data // See https://htmldom.dev/serialize-form-data-into-a-query-string const params = serialize(formEle); // Create new Ajax request const req = new XMLHttpRequest(); req.open('POST', formEle.action, true); req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); // Handle the events req.onload = function () { if (req.status >= 200 && req.status < 400) { resolve(req.responseText); } }; req.onerror = function () { reject(); }; // Send it req.send(params); }); }; // 用法 const formEle = document.getElementById(...); submit(formEle).then(function (response) { // `response` is what we got from the back-end // We can parse it if the server returns a JSON const data = JSON.parse(response); ... }); ``` 上述代码中,定义了 `submit` 函数,它接受一个表单元素作为参数,将表单数据序列化后使用 `XMLHttpRequest` 对象发送请求,并通过 `Promise` 处理响应 [^4]。 ### 通过监听表单提交事件并序列化数据 在表单的 `onsubmit` 事件中阻止默认提交行为,然后使用 `serialize()` 函数获取表单数据并通过 `$.ajax` 发送请求。示例代码如下: ```javascript // 假设表单 ID 为 addTaskform $('#addTaskform').on('submit', function (e) { e.preventDefault(); // 阻止表单默认提交行为 $.ajax({ type: 'post', url: 'your-url', data: $('#addTaskform').serialize(), success: function (data) { console.log(data); } }); }); ``` 上述代码中,监听表单提交事件,阻止默认提交行为,然后使用 `serialize()` 函数将表单数据序列化并通过 `$.ajax` 方法发送 [^1][^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值