现在的位置: 网页制作教程JS网页特效 >正文
JavaScript脚本

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

发表于2016/10/8 JS网页特效 0条评论 ⁄ 热度 2,129℃
导语:前几天,在校验一个表单数据用到ajax时,遇到 return false 无效问题,以下就是对这个问题进行了分析介绍,需要的朋友可以参考下。

ajax中return false不生效

先给大家贴上修改前的代码:

/**表单提交校验**/
function onSubmit(){
    if($('#username').val().length<1){
        alert("姓名不少于一个汉字");
        return false;
    }
    var t = new Date().getTime();
    $.ajax({
        type: "POST",
        url: "/checkuser/",
   data: "name=" + $('#username').val() + "&time=" + t,
        success:function(res){
            if(res == 'exists'){
                alert("姓名已存在,请修改.");
                return false;
            }
        }
    });
}

运行以上代码后,我们会遇到ajax中的return false不生效的问题,究其原因,我们做了以下两点分析。

1. ajax时return false 的function与onsubmit()不是同一个函数;

2. 在ajax执行时,async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)。

修改后的代码:

/**表单提交校验**/
function onSubmit(){
    if($('#username').val().length<1){
        alert("姓名请不少于一个汉字");
        return false;
    }    
    var flag = true;
    var t = new Date().getTime();
    $.ajax({
        type: "POST",
        async:false,  // 设置同步方式
        cache:false,
        url: "/checkuser/",
        data: "name=" + $('#username').val() + "&time=" + t,
        success:function(res){
            if(res == 'exists'){
                alert("姓名已存在,请修改.");
                flag = false;
            }
        }
    });
}
if(!flag){
    return false;
}

经过以上修改后,值是通过变量flag传递,ajax中return false不生效的问题完美解决。

  • 暂无评论