六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

onsubmit 校验表单时利用 ajax 的 return false 无效问题

[复制链接]

升级  16.33%

75

主题

75

主题

75

主题

举人

Rank: 3Rank: 3

积分
249
 楼主| 发表于 2013-1-29 11:22:30 | 显示全部楼层 |阅读模式
      前几天,在校验一个表单数据时用到ajax时,遇到 return false 无效问题。
/** * 表单提交校验 **/function onSubmit(){    if($('#name').val().length<2){        alert("名称请不少于两个汉字");        return false;    }    var t = new Date().getTime();    $.ajax({        type: "POST",        url: "/users/checkrepeat/",  data: "name=" + $('#name').val() + "&time=" + t,        success:function(res){            if(res == 'exists'){                alert("名称已存在,请修改.");                return false;            }        }    });}问题原因:
 
1. ajax时return false 的function与onsubmit()不是同一个函数;
2. 在ajax执行时,async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)。
 
修改后的代码:
/** * 表单提交校验 **/function onSubmit(){    if($('#name').val().length<2){        alert("名称请不少于两个汉字");        return false;    }        var flag = true;    var t = new Date().getTime();    $.ajax({        type: "POST",        async:false,  // 设置同步方式        cache:false,        url: "/users/checkrepeat/",  data: "name=" + $('#name').val() + "&time=" + t,        success:function(res){            if(res == 'exists'){                alert("名称已存在,请修改.");                flag = false;            }        }    });    if(!flag)        return false;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表